C# 从MSC查找msform上的所有控件#
我正在尝试使用VBA可扩展性互操作从c#查找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
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会自动进行转换…但我不知道如何转换!!!