C# 与OleObjects/Embedded控件交互VSTO、VBA转换

C# 与OleObjects/Embedded控件交互VSTO、VBA转换,c#,excel,visual-studio,vba,vsto,C#,Excel,Visual Studio,Vba,Vsto,我正在将一个旧的VBA项目转换成一个VSC。我知道很多代码都必须跳出窗口,但我希望仍然使用嵌入到工作表中的布局和对象。对象的示例包括控件按钮、标签、图像等 当我在创建新项目时选择文档作为模板时,所有这些都能很好地保持。我遇到的问题是,我似乎无法选择或引用这些对象中的任何一个。例如,在一张纸的中间有一个按钮。如果我在VS2012中打开工作表,我可以看到按钮。我甚至可以突出显示它,但不能选择它。如果我右键单击按钮以调出属性,它将调出图纸的属性,而不是按钮。我不能调整它们的大小或移动它们,这不是我想要

我正在将一个旧的VBA项目转换成一个VSC。我知道很多代码都必须跳出窗口,但我希望仍然使用嵌入到工作表中的布局和对象。对象的示例包括控件按钮、标签、图像等

当我在创建新项目时选择文档作为模板时,所有这些都能很好地保持。我遇到的问题是,我似乎无法选择或引用这些对象中的任何一个。例如,在一张纸的中间有一个按钮。如果我在VS2012中打开工作表,我可以看到按钮。我甚至可以突出显示它,但不能选择它。如果我右键单击按钮以调出属性,它将调出图纸的属性,而不是按钮。我不能调整它们的大小或移动它们,这不是我想要的

我似乎也无法在代码中引用它们,例如…Sheet1.ControlButton1。。。或者…表1.OleObjectn。。。永远不会提及任何事情。如果我直接从解决方案文件夹打开工作簿,并单击同一个控件,我可以看到属性,Excel中的公式栏读取=EMBEDForms.CommandButton.1


我也无法循环遍历所有对象,只显示它们的名称。显然,我找不到存储这些信息的集合所在的位置。

试试工作簿。形状集合

根据以下评论进行编辑。这项工作:
Globals.ThisWorkbook.Worksheets1.OleObjectsCommand按钮1

我试过了。我可以添加一个形状,然后当我在形状中循环时,新的形状似乎是唯一的形状。好的,糟糕的解决方法,但是你能在实际的VBA项目中创建一个小包装函数,除了返回对这些对象的引用之外什么都不做吗?然后您可以使用C中的Object obj=Application.RunFunctionName。值得一试。我会试一试并让你知道。显然是Globals.thishworkbook.Worksheets1.oleobjects命令和按钮1;工作正常,但Sheet1上代码中的'Me.OLEObjectsCommandButton1不工作。。。不知道为什么。你的回答让我明白了如果你想编辑我会接受的。我想您不知道如何从OLEObject按钮获取click事件。我尝试添加事件和删除,但每次都会抛出一个异常。很高兴您取得了进展。六羟甲基三聚氰胺六甲醚。。。您可以让click宏触发内置Excel事件,然后在.Net中捕获Excel事件。但令人恼火的是,Excel让你跳过了这些障碍。