VBA中如何动态枚举当前工作簿中所有的Form。
这些Form都是我在设计时添加的UserForm
这些Form都是我在设计时添加的UserForm
解决方案 »
- 如何用vb语言选中word中多个页面的内容?
- vb ado更新mysql数据库中一字段数据时,速度很慢
- 如何在界面设计时找到失踪的透明控件
- 在vb中怎样控制水晶报表4.6中预览窗口中打印按纽失效呢?急急急急急急急急急急急急急急
- 关于MSFlexGrid与MSHFlexGrid有什么区别?送分题!!!!!
- 用vb6做自定义控件运行时属性无效问题
- 100分,如何让data数据自动更新?
- 如何將鼠標焦點置於表單的第一個欄位。在線待!
- 公用变量和全局变量有什么不同
- vb图像的分割,用一个MxN矩阵分割图像该用什么方法呢
- 如何解决找不到可插入的ISAM?
- VB关于ADO连接SQL的一个查询问题,难得我哦!
UserForm 对象是一个窗口或对话框,用以构成应用的用户界面部分。UserForms 集合对象是一个集合,其部件代表应用程序中每个装入的 UserForm。UserForms 集合对象有一个 Count 属性,一个 Item 属性,及一个 Add 方法。Count 用来指定集合对象中的部件个数;Item(缺省成员)用来指定某个集合对象成员;而 Add 则用来在集合对象中放置一个新的 UserForm 部件。语法UserFormUserForms[.Item](index)index 代表从 0 到 UserForms.Count – 1 之间的一个整型数;Item 则是 UserForms 集合对象的缺省成员,并且是不须指定的。说明可以经由 UserForms 集合对象,对程序中所有已装入的用户窗体进行访问,其识别的方法须经由 UserForms 这个全局变量。可以将 UserForms(index) 传送到一个参数为 UserForm 类的函数中。可利用用户窗体的属性决定其外观,例如位置、大小、颜色,以及动作。用户窗体也会回应由用户所引起或系统引发的事件。例如,可以在 UserForm 的 Initialize 事件过程中编写代码,以便在 UserForm 显示前初始化模块级别的变量。除了属性与事件之外,还可以在代码中使用方法来操纵用户窗体。例如,可以用 Move 方法来改变 UserForm 的位置与大小。在设计用户窗体时,设置 BorderStyle 属性可定义边框,以及设置 Caption 属性以便在标题栏填入文本。利用代码,以 Hide 及 Show 方法使 UserForm 在运行时为可见的或不可见的。UserForm 是一种 Object 数据类型。设计时设置变量为 UserForm 类型的实例前,可将其声明为 UserForm。同样的,也可用UserForm 类型传送参数给过程。可以在代码中用 Dim 中的关键字 New、Set 及 Static 等语句,来建立用户窗体的多个实例。可以用 Controls 集合对象,来访问 UserForm 上的控件的集合对象。例如,要隐藏 UserForm 上的所有控件,可以用类似以下的代码:For Each Control in UserForm1.Controls
Control.Visible = False
Next Control
Dim f As Form
For Each f In Forms
MsgBox f.Name
Next
End Sub
Dim f
For Each f In UserForms
Debug.Print f.Name
Next f
End Sub只能枚举已载入的窗体
[工具] >> [宏] >> [安全性] >> [安全级](选低)
[工具] >> [宏] >> [安全性] >> [可靠来源] >> [信任对于"Visual Basic 项目"的访问](选中它)
[工具] >> [宏] >> [Visual Basic 编辑器](插入一个或多个用户窗体)
[工具] >> [宏] >> [Visual Basic 编辑器](插入一个模块, 输入以下代码, 运行EnumUserForms)Option ExplicitPrivate Sub EnumUserForms()
Dim i As Long
With ThisWorkbook.VBProject.VBComponents
For i = 1 To .Count
If .Item(i).Type = 3 Then
MsgBox .Item(i).Name
End If
Next
End With
End Sub
Dim i As Long
With ThisWorkbook.VBProject.VBComponents
For i = 1 To .Count
If .Item(i).Type = 3 Then
MsgBox .Item(i).Name & vbCrLf & "width:" & ThisWorkbook.VBProject.VBComponents(i).Properties("width") & vbCrLf & "height" & ThisWorkbook.VBProject.VBComponents(i).Properties("height")
End If
Next
End With
End Sub
Dim i As Long
Dim j As Long
Dim oCtrls As Controls
With ThisWorkbook.VBProject.VBComponents
For i = 1 To .Count
If .Item(i).Type = 3 Then
If .Item(i).Name = "UserForm1" Then
Set oCtrls = .Item(i).Properties("Controls").Object
If oCtrls.Count > 0 Then MsgBox oCtrls.Item(0).Name
Set oCtrls = Nothing
End If
End If
Next
End With
End SubUserForm1上加控件试一下