Dan*_*iel 2 excel vba excel-vba userform
我想弄清楚如何加载每个UserForm而不必调用Userform1.Show UserForm2.Show等.这是受到这个答案的评论的启发:模块中的Excel VBA UserForm_Initialize().
我在几个地方发现了这种方法:
Sub OpenAllUserForms()
Dim uf As UserForm
For Each uf In UserForms
uf.Show
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,无论是否有多少附加到工作簿,都不会显示Userforms.当我逐步完成代码时,我确定UserForms集合是空的!
如何在不必明确显示每个Userform的情况下加载每个Userform?
根据这个页面:UserForm对象
UserForms集合是一个集合,其元素表示应用程序中的每个加载的UserForm.
由于未加载Userforms,因此它们不会出现在集合中.这意味着您需要以不同的方式加载表单.为了获取每个UserForm的名称,您需要允许代码访问Visual Basic项目.否则,您需要提供Userform的名称.
以下将打开当前VBProject中的每个UserForm.
Sub OpenAllUserForms()
Dim VBComp As Object
For Each VBComp In Application.VBE.ActiveVBProject.VBComponents
If VBComp.Type = 3 Then '3 = vbext_ct_MSForm
VBA.UserForms.Add(VBComp.Name).Show
End If
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为每个UserForm都在VBProject中列为VBComponent.一旦代码确定哪些组件是UserForms,它就会将Userform添加到集合中并显示它.如果省略该.Show表单仍将运行Initialize事件,但随后立即超出范围并消失.
| 归档时间: |
|
| 查看次数: |
8395 次 |
| 最近记录: |