Tag: vba

从VBA调用Rest API – “与服务器的连接exception终止”

我正在尝试从Excel VBA RESTfull API。 我已经在C#中使用了一个工作版本: //Request Auth Token var client = new RestClient(“https://api.xxx.com/exp/oauth2/v1/access_token_cors”); var request = new RestRequest(Method.POST); request.AddHeader(“Content-Type”, “application/x-www-form-urlencoded”); request.AddParameter(“application/x-www-form-urlencoded”, “response_type=token&grant_type=client_credentials&client_id=1234&client_secret=1234&scope=”, ParameterType.RequestBody); IRestResponse response = client.Execute(request); 需要将此代码移植到VBA。 我写: Set MyRequest = CreateObject(“WinHttp.WinHttpRequest.5.1”) MyRequest.Open “POST”, “https://api.xxx.com/exp/oauth2/v1/access_token_cors”, False MyRequest.setRequestHeader “Content-Type”, “application/x-www-form-urlencoded” PostData = “””application/x-www-form-urlencoded””, “”response_type=token&grant_type=client_credentials&client_id=1234&client_secret=1234&scope=””” MyRequest.send (PostData) 当我运行VBA版本时,我收到错误“与服务器的连接exception终止”。发送行 由于它在C#中工作,因此不能成为防火墙或服务器问题。 我能做些什么才能让它发挥作用? 我搜索过类似的问题,但没有一个适用于我的情况。

解析器将.net字典或列表转换为VBA的等效字典或集合

我必须将.net字典或列表类型的对象传递给VBA。 但是当我在VBA端传递.net字典时,我无法在.net端看到字典的元素。 我在C#中的代码 Dictionary dict = new Dictionary(); dict.Add(“First”, “1”); dict.Add(“Second”, “2”); dict.Add(“third”, “3”); dict.Add(“Forth”, “4”); 我从C#调用VBA宏 Application.Run(“MyVBAMacro”, dict); 在VBA方面我的宏是 public Sub MyVBAMacro(var as variant) end Sub 我也尝试过 public Sub MyVBAMacro(var as Scripting.Dictionary) end Sub 但对我不起作用。 在VBA的WATCH窗口中,我没有得到字典元素。 所以我认为.net和VBA对象不一样。 那么有没有任何解析类可以将我的.net对象转换为等效的VBA对象? 问题也与.net List对象有关。 .net数组工作正常,但我想将字典或集合类型的对象传递给VBA。 如果有解决方案,请告诉我。 谢谢,Monil Gangar

将VBA转换为.NET语言

可能重复: 是否可以将VBA转换为C#? 假设我有一个大的VBA项目,并希望将其转换为.NET语言。 有没有办法自动完成? 或者我可以生成UML和类结构,然后手动附加方法体?

Excel VBA项目未关闭

我有一个COM插件,我在其中处理excel事件。 我单击Alt F11以查看与excel相关的VBA项目。 但是,当我关闭工作簿时,项目资源管理器中的Excel VBA项目也不会关闭。 当我的COM插件未安装时,它会正常关闭。 发生了什么,我应该做些什么?

从C#调用某些Excel VBA宏时出错

我一直在努力和搜索这个问题无济于事…我有一些测试宏在从Excel运行时工作得很好但是从C#调用时失败或不工作,使用互操作… 我正在使用MS Visual Studio 2012(在64位Windows 7上)创建一个控制台应用程序,它将调用用Excel 2007编写的VBA宏TestMacro()。 下面是调用宏的C#代码:(我基本上复制了在这里完成的操作从Visual C#.NET使用自动化运行Office宏 ) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Configuration; using System.Reflection; using Excel = Microsoft.Office.Interop.Excel; using Microsoft.Office.Core; namespace C#_Macro_Wrapper { class Program { static void Main(string[] args) { RunVBATest(); } public static void RunVBATest() { System.Globalization.CultureInfo oldCI = System.Threading.Thread.CurrentThread.CurrentCulture; System.Threading.Thread.CurrentThread.CurrentCulture = new […]

输出参数有什么问题?

在SQL和C#中,我从来都不喜欢输出参数。 我从未在VB6中传递参数ByRef。 关于计算副作用以完成某些事情的事情让我感到困扰。 我知道它们是一种无法从函数返回多个结果的方法,但SQL中的行集或C#和VB中的复杂数据类型也同样适用,并且对我来说似乎更自我记录。 我的想法有什么问题,还是来自权威来源的资源支持我? 你个人对此有何看法,为什么? 对于想要设计输出参数可能会说服他们使用不同结构的同事,我能说些什么呢? 编辑:有趣的转 – 输出参数我问这个问题用于代替返回值。 当返回值为“ERROR”时,调用者应该将其作为exception处理。 我这样做但对这个想法并不满意。 一位同事没有被告知有必要处理这种情况,因此,由于程序无声地失败,大量资金丢失了!

成功注册了COM DLL,但不能使用类方法

我使用regasm.exe注册了一个COM DLL,现在我正在尝试编写一个使用DLL中的类的VBA脚本。 该DLL是ExcelDataReaderLibrary.dll 。 在C#源代码中,该类描述如下(包括来自此库的代码): using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Data; using Excel; namespace ExcelDataReaderLibrary { public class ExcelDataReader { public void readSheet(string filePath,string sheetName,string outPath) { // code for method here } } } 我的assembly.cs文件包括以下内容: [assembly: ComVisible(true)] [assembly: Guid(“b1e78f8f-9ab0-46d8-beac-b843656aacdb”)] 当我打开VBA编辑器并转到引用时,我看到ExcelDataReaderLibrary的引用。 请注意,与此引用关联的文件是ExcelDataReaderLibrary.tlb ,而不是ExcelDataReaderLibrary.dll 。 检查此引用后,我想在VBA中创建和使用ExcelDataReader对象,如下所示: Sub x() […]

Excel 2010 64位无法创建.net对象

我有一个简单的类库,我在Excel中使用。 这是我class级的简化…… using System; using System.Runtime.InteropServices; namespace SimpleLibrary { [ComVisible(true)] public interface ISixGenerator { int Six(); } public class SixGenerator : ISixGenerator { public int Six() { return 6; } } } 在Excel 2007中,我将创建一个启用宏的工作簿,并添加一个包含以下代码的模块: Public Function GetSix() Dim lib As SimpleLibrary.SixGenerator lib = New SimpleLibrary.SixGenerator Six = lib.Six End Function 然后在Excel中我可以调用函数GetSix(),它将返回六。 这不再适用于Excel 2010 64位。 我得到运行时错误’429’:ActiveX组件无法创建对象。 […]

OpenXML SDK将VBA注入excel工作簿

我可以成功地将一段VBA代码注入到生成的excel工作簿中,但我要做的是使用Workbook_Open()事件,以便在文件打开时执行VBA代码。 我将sub添加到我的xlsm模板文件中的“ThisWorkbook”对象。 然后,我使用openxml生产力工具来反映代码并获取编码的VBA数据。 生成文件并查看VBA时,我看到“ThisWorkbook”和“ThisWorkbook1”对象。 我的VBA位于“ThisWorkbook”对象中,但代码永远不会在打开时执行。 如果我将我的VBA代码移动到“ThisWorkbook1”并重新打开该文件,它可以正常工作。 为什么要创建一个额外的“ThisWorkbook”? 是否无法使用Workbook_Open()子系统注入excel电子表格? 这是我正在使用的C#代码的片段: private string partData = “…”; //base 64 encoded data from reflection code //open workbook, myWorkbook VbaProjectPart newPart = myWorkbook.WorkbookPart.AddNewPart(“rId1”); System.IO.Stream data = GetBinaryDataStream(partData); newPart.FeedData(data); data.Close(); //save and close workbook 有人有想法吗?

C#与VBA中的List 类似

我想在VBA上创建一个List ,就像你在C#上创建一样,我有什么方法可以做到这一点? 我在这里寻找有关它的问题,但我找不到任何问题。