Tag: excel vba

如何使用C#的Application.OnKey而不涉及VBA代码?

我想在Excel模板(.xlt)中使用UDF我使用了Application.OnKey(“^v”,”MyFunction”); 我想在用户粘贴excel中的单元格时使用单独的函数,即MyFuction,但是当我在thisworkbook.cs中定义函数时,我不会工作… 提前致谢..

COM服务器如何使用不同的ComInterfaceType枚举封送C#类库中的可空?

我听说Nullable是一个C#generics类,它不能与COM一起使用 – 就像任何其他generics类一样。 好吧,在我的C#类库中,我有: [InterfaceType(ComInterfaceType.InterfaceIsDual), Guid(“2FCEF713-CD2E-4ACB-A9CE-E57E7F51E72E”)] public interface ICOMClass { int? GetNullable(); } [ClassInterface(ClassInterfaceType.None)] [Guid(“57BBEC44-C6E6-4E14-989A-B6DB7CF6FBEB”)] public class COMClass : ICOMClass { public int? GetNullable() { int? hello = null; return hello; } } 令人惊讶的是 ,编译并且我能够在VBE中附加对我的COMClass库的引用。 我知道: VBA 不在对象浏览器的成员列表中列出.GetNullable() (即使显示隐藏的成员已勾选) VBA没有在智能下拉列表中列出.GetNullable() 但为什么: Dim c as new COMClass c.GetNullable 不抛出相当期望的Object doesn’t support this property or method ? […]

从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

Excel VBA项目未关闭

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

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 有人有想法吗?

使用HTTP Post从Excel中插入SQL Server数据库中的数据

我想在Excel中单击“插入”按钮时将数据插入SQL Server数据库。 数据在单元格A2和B2中,这里是excel中“插入”按钮背后的代码: Dim HttpReq As New WinHttp.WinHttpRequest HttpReq.Open “POST”, “http://localhost:11121/Student/Insert/”, False HttpReq.Send “jsmith112” 这是我在VS中的Controller操作的代码: [HttpPost] public ActionResult Insert(string id) { try { student.AddToStudents(id); student.SaveChanges(); return RedirectToAction(“Index”); } catch { return View(); } } 这似乎没有用,有人能引导我完成这个吗? 提前致谢

如何在不使用Interop的情况下将VBA代码注入Excel .xlsm?

我的目标是将宏添加到Excel工作簿,而无需在Excel信任中心中启用“信任访问VBA项目对象模块”。 (启用访问似乎存在安全风险)。 在我最初的事实查找搜索中找到了随机拼图: – 我看到VBA脚本作为vbaProject.bin存储在压缩的.xlsm文件中。 – 有几个免费/商业资源可以使用excel文件: 创建excel没有interop和模板,有或没有行和列 如果只是在C#项目中有一个VBA脚本文件,C#代码从中提取并注入Excel文档而没有VBA互操作,那将是很好的。 任何快速/快速/简单/直接的方式,或者我应该使用上面链接的免费/商业资源吗?