我正在努力C#,现在VB.NET是旧VBA程序的端口.它有许多MSForms/OleObjects嵌入其中CommandButton甚至图像.
我的第一个想法是声明所有的按钮,Microsoft.Vbe.Interop.Forms.CommandButton但这导致了一个无法强制转换的COM异常.如果我尝试这个解决方案的更通用版本,我找不到任何项目,如果我尝试通过所有项目,我会注意到它们都是,但没有任何控件:System._COM type...Forms.CommandButtonVBComponetworkbook
foreach (VBComponent xxx in Globals.ThisWorkbook.VBProject.VBComponents) {
Interaction.MsgBox(xxx.Name);
Interaction.MsgBox(xxx.ToString);
}
Run Code Online (Sandbox Code Playgroud)
因此,所有这些控件的不是.VBComponets,但我可以找到为他们OLEobjects中thisworkbook.worksheets(n).OLEobjects(这是counterintutive给我,但我可能不了解系统开始).
如何处理来自此类对象的Click操作?
我假设我需要使用Excel.OLEObjectEvents_Event界面,但我似乎无法弄清楚如何.如果我尝试使用自定义事件delegates,我似乎无法将它们分配给OleObjects.如果我使用ActionClickEventHandler.CreateDelegate我可以得到各种各样的错误,这让我觉得这是一个死胡同.
在官方文件从MS似乎并不认为有帮助的,但它确实给我介绍的想法的Verb,我期待到.到目前为止,只会出现"应用程序无法启动"的错误.
即使只是尝试使用两个标准事件之一.GotFocus,我总是拉出0x80040200错误.例:
Excel.OLEObject ButtonCatcher = Globals.ThisWorkbook.Worksheets(1).OLEObjects("CommandButton1");
ButtonCatcher.GotFocus += CommandButton1_Click;
Run Code Online (Sandbox Code Playgroud)
Exception from HRESULT: 0x80040200在第二行引发COMException .该按钮已启用,我在查找Office开发站点的代码后查看了该按钮.
在包含控件的工作表的代码中尝试更通用的方法: …
我在一个学术实验室工作,并一直致力于VSTO插件到Excel(主要用于处理复杂的数据分析和生成报告,我认为这是VSTO的面包和黄油).在实验室,我们几乎完全拥有Office 2010(大学就是这样).我们正在与使用Office 365的制药公司合作.
他们想要使用我一直在开发的相同插件,所以我们都在同一页面上.我已经让我们的技术转让办公室知道如果有任何许可问题,因为我认为这不是我的问题.
在技术方面,我一直试图弄清楚加载项是否适用于365.我在VS-2012(专业学术版)中构建它并且在Excel 2010中运行良好(尽管我一直在添加它).
我读过了:
这听起来并不合适,直到我意识到如果他们获得高级版本,它仍然包括本地安装:
所以我的问题是,如果有人将365 Premium Edition与本地安装一起使用,那么为2010年构建的VSTO是否仍然有效? 我可以在几天内回答这个问题,当时我亲自见到它们(然后尝试一下),但如果可能的话,我想提前知道答案.
如果没有,最好的解决方案是回溯到VBA(似乎是倒退)还是尝试使用SharePoint(这是我生命中的第一次).
谢谢.