首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用VBIDE从Excel用户表单中删除控件

使用VBIDE从Excel用户表单中删除控件
EN

Stack Overflow用户
提问于 2016-02-14 12:40:48
回答 1查看 1.2K关注 0票数 1

我需要从75个Excel用户表单中删除一些控件。我让VBA代码循环遍历文件,并使用VBIDE删除了代码。但是,一直无法获得控件的句柄。

以下是我一直在使用的对象,而不是浪费时间在我尝试过的代码上:

代码语言:javascript
复制
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

感谢所有人

EN

回答 1

Stack Overflow用户

发布于 2016-02-14 18:24:49

也许我没有达到你的确切目标,但下面的内容至少应该能帮助你入门

代码语言:javascript
复制
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")以及控件("CheckBox“、"chkNewCNV")即可

至于“无效的前向引用”错误,可能是在您试图更改(删除)其控件时加载了"frmSend“用户表单。如果是这样的话,你必须先卸载它(只是隐藏它不起作用),然后对它采取行动,最后加载它。或者,您必须在删除控件之前运行删除逻辑子模块,或者是其中一个或两个的混合...然后,由于所有这些操作(卸载表单、处理表单及其控制/逻辑)的实际计时,它们不适当地(尽管是不由自主地)干扰,因此仍然可能存在一些问题。

为了摆脱这些(也可能是其他的!)可能的副作用一个简单的解决方案可以简单地隐藏不需要的用户表单控件,并且在显示之前加载用户表单的代码中可以做到这一点。或者,如果您“必须”以编程方式执行操作,则可以添加处理(而不是删除)逻辑的“隐藏”代码行

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35388423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档