2016-02-14 76 views
1

我需要从75 Excel用户窗体中删除一些控件。我得到了VBA代码循环彻底的文件和使用VBIDE,我得到的代码被删除。但是,还没有能够掌握控制。使用VBIDE从Excel用户窗体中删除控件

而不是浪费时间和代码,我已经尽力了,这里是我一直在使用对象:

Dim VBProj As VBIDE.VBProject 
Dim VBComp As VBIDE.VBComponent 
Dim CodeMod As VBIDE.CodeModule 
Dim CompItem As Object 
Dim objVBFrm As UserForm 

Set VBProj = ActiveWorkbook.VBProject 
Set VBComp = VBProj.VBComponents("frmSend") 
Set CodeMod = VBComp.CodeModule 
Set objVBFrm = VBComp.Designer 

With objVBFrm 
    .Controls.Remove chkNewCNV 
End With 

感谢所有

回答

1

也许我没有得到你确切的目标,但接下来应该帮助您开始至少

Sub RemoveControlsFromUserForm() 
Dim VBP As VBIDE.VBProject 
Dim VBC As VBIDE.VBComponent 
Dim cntrls As Controls 
Dim cntrl As Control 

Set VBP = ActiveWorkbook.VBProject 
For Each VBC In VBP.VBComponents 
    With VBC 
     If .Type = vbext_ct_MSForm And .Name = "UserForm1" Then 
      Set cntrls = .Designer.Controls 
      For Each cntrl In cntrls 
       If TypeName(cntrl) = "CheckBox" Then 
        If cntrl.Name = "chkNewCNV" Then cntrls.Remove cntrl.Name 
       End If 
      Next cntrl 
     End If 
    End With 
Next VBC 

End Sub 

只需更改组件类型(vbext_ct_MSForm)和名称(“UserForm1”)以及控制者(“复选框”,“chkNewCNV”)按您的NE编辑

至于“无效的前向引用”错误,它可能是“frmSend”用户窗体在您试图更改(删除)其控件时加载。 应该是这种情况,你必须先卸载它(只隐藏它不会工作),然后对其进行操作并最终加载它。 或者它可能是您必须运行删除控制之前删除控制一个 或两个... 的混合,然后仍然可能会由于所有这些操作的实际时间(卸载形式,处理它及其控制/逻辑),让它们不恰当地(尽管不由自主)干扰。

为了摆脱那些(也可能是其他!)可能的副作用,一个普通的解决方案可能只是隐藏不需要的用户窗体控件,并且您可以在代码中正确地加载用户窗体,然后才显示它。 或者,如果您“必须”以编程方式行事,您可以添加这些“隐藏”代码行处理(而不是删除)逻辑

+0

复制您的代码并将UserForm1更改为我的用户名称frmSend。我们走近了,发现了这些控件。在cntrls.Remove中获取此错误cntrl.Name “无法删除控件。无效的前向引用或对未编译类型的引用”。 – Willie

+0

对不起,我没有解释目标。我有一个Excel文件用于更改一批Excel文件。它循环遍历文件夹中的所有文件,打开,修改和关闭。我需要处理这75个文件,是从用户窗体中移除三个控件,以及它们的逻辑。我删除了逻辑,但无法删除控件。 – Willie

相关问题