Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从MSC查找msform上的所有控件#_C#_Excel_Vba - Fatal编程技术网

C# 从MSC查找msform上的所有控件#

C# 从MSC查找msform上的所有控件#,c#,excel,vba,C#,Excel,Vba,我正在尝试使用VBA可扩展性互操作从c#查找msform上的所有控件 我可以通过以下方式找到所有表格: using System; using Microsoft.Office.Interop.Excel using Microsoft.Vbe.Interop; using Microsoft.Vbe.Interop.Forms; ..... foreach (Microsoft.Vbe.Interop.VBComponent mycom in wb.VBProject.VBCompon

我正在尝试使用VBA可扩展性互操作从c#查找msform上的所有控件

我可以通过以下方式找到所有表格:

using System;
using Microsoft.Office.Interop.Excel
using  Microsoft.Vbe.Interop;
using  Microsoft.Vbe.Interop.Forms;
.....

 foreach (Microsoft.Vbe.Interop.VBComponent mycom in wb.VBProject.VBComponents)
        {

                 if (mycom.Type == Editor.vbext_ComponentType.vbext_ct_MSForm)

.....
但我找不到表单上的控件

我认为应该是这样的:

....
  foreach (Microsoft.Vbe.Interop.Forms.Control ctrl in Microsoft.Vbe.Interop.VBComponent.Designer.Controls)
....
但无法识别控件集合

有什么想法吗


此线程提供有关我面临的问题的更多信息:


此代码应适用于:

using System;
using Microsoft.Office.Interop.Excel
using VBA = Microsoft.Vbe.Interop;

...

VBA.Forms.UserForm form;
VBA.Forms.Control c;

foreach (VBA.VBComponent mod in wb.VBProject.VBComponents)
{
    // Use only VBA Forms
    if (!(mod.Designer is VBA.Forms.UserForm)) continue;

    form = (VBA.Forms.UserForm) mod.Designer;

    for (int i = 1; i < form.Controls.Count; i++)
    {
        c = (VBA.Forms.Control)form.Controls.Item(i);
        ...
    }
}
使用系统;
使用Microsoft.Office.Interop.Excel
使用VBA=Microsoft.Vbe.Interop;
...
VBA.Forms.UserForm;
VBA.Forms.controlc;
foreach(wb.VBProject.VBComponents中的VBA.VBComponent mod)
{
//仅使用VBA表单
如果(!(mod.Designer为VBA.Forms.UserForm))继续;
form=(VBA.Forms.UserForm)mod.Designer;
for(int i=1;i
此代码应适用于:

using System;
using Microsoft.Office.Interop.Excel
using VBA = Microsoft.Vbe.Interop;

...

VBA.Forms.UserForm form;
VBA.Forms.Control c;

foreach (VBA.VBComponent mod in wb.VBProject.VBComponents)
{
    // Use only VBA Forms
    if (!(mod.Designer is VBA.Forms.UserForm)) continue;

    form = (VBA.Forms.UserForm) mod.Designer;

    for (int i = 1; i < form.Controls.Count; i++)
    {
        c = (VBA.Forms.Control)form.Controls.Item(i);
        ...
    }
}
使用系统;
使用Microsoft.Office.Interop.Excel
使用VBA=Microsoft.Vbe.Interop;
...
VBA.Forms.UserForm;
VBA.Forms.controlc;
foreach(wb.VBProject.VBComponents中的VBA.VBComponent mod)
{
//仅使用VBA表单
如果(!(mod.Designer为VBA.Forms.UserForm))继续;
form=(VBA.Forms.UserForm)mod.Designer;
for(int i=1;i
我认为这个问题归结于继承和互操作。“通用”设计器对象应从窗体互操作继承控件对象。看起来vb.net会自动进行转换…但我不知道如何转换!!!我认为这个问题归结于继承和互操作。“通用”设计器对象应从窗体互操作继承控件对象。看起来vb.net会自动进行转换…但我不知道如何转换!!!