1、用户窗体的基础知识用户窗体的显示方式用于以编程方式显示用户窗体的语法是下列: UserFormName.Show若要显示名为 UserForm1 用户窗体,使用以下代码: UserForm1.Show,您可以加载到内存用户窗体而不实际显示它。 可能需要复杂的用户窗体多个要显示的秒数。 因为您可以预先用户窗体加载到内存中,您可以决定何时会导致这种开销。 而不显示它加载到内存的 UserForm1,使用下面的代码: Load UserForm1显示用户窗体,您必须使用了以前显示的 显示 方法。 如何暂时隐藏用户窗体如果要暂时隐藏用户窗体,使用 隐藏 方法。 您可能希望隐藏用户窗体,如果您的应用程序
2、涉及到用户窗体之间移动。 若要隐藏用户窗体,使用下面的代码:UserForm1.Hide如何从内存中删除用户窗体若要从内存中删除用户窗体使用 卸载 语句。 若要卸载 UserForm1 命名的用户窗体,使用下面的代码: Unload UserForm1如果您卸载了用户窗体与用户窗体相关联,则与在用户窗体上某个控件关联的事件过程中 (渚嬪的方式 单击 命令按钮 ),可以使用“Me“关键字而不是用户窗体的名称。 若要使用“Me“关键字卸载用户窗体,使用下面的代码: Unload Me如何使用用户窗体事件用户窗体支持许多预定义的事件,您可以将附加 VBA 过程。 该事件时则该过程,您附加到该事件的运
3、行。 由用户执行的单个操作可以启动多个事件。 最经常使用的用户窗体的事件包括 初始化 事件、, Click 事件和 终止 事件。 请注意 VBA 模块包含事件过程可能被称为“隐藏“用户窗体模块。 在模块包含事件过程中不可见 Visual Basic 编辑器的 Microsoft 项目资源管理器窗口的 模块 集合。 您必须双击用户窗体可以查看用户窗体代码模块的正文。 如何捕获用户窗体事件要捕获用户窗体事件,请按照这些步骤操作: 1. 在 Excel 中创建一个新的工作簿。 2. 在 工具 菜单上指向 宏 ,然后单击 Visual Basic 编辑器 。 3. 在 插入 菜单中上, 单击插入工作簿
4、中的用户窗体的 用户窗体 。 4. 双击要显示的用户窗体的代码窗口的 用户窗体 。 5. 在模块中,键入以下代码: Private Sub UserForm_Click() Me.Height = Int(Rnd * 500) Me.Width = Int(Rnd * 750)End SubPrivate Sub UserForm_Initialize() Me.Caption = “Events Events Events!“ Me.BackColor = RGB(10, 25, 100)End SubPrivate Sub UserForm_Resize() msg = “Width: “
5、 & Me.Width & Chr(10) & “Height: “ & Me.Height MsgBox prompt:=msg, Title:=“Resize Event“End SubPrivate Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) msg = “Now Unloading “ & Me.Caption MsgBox prompt:=msg, Title:=“QueryClose Event“End SubPrivate Sub UserForm_Terminate() msg = “Now
6、Unloading “ & Me.Caption MsgBox prompt:=msg, Title:=“Terminate Event“End Sub 6. 在 运行 菜单上单击 运行子过程/用户窗体 。首次加载用户窗体时宏使用 初始化 事件在用户窗体的 标题 属性改为事件事件事件! 和 背景色 属性以深蓝色。 单击用户窗体,时,触发 Click 事件。 Click 事件调整用户窗体的大小。 因为您创建一个 Resize 事件过程,您将收到两个消息框,单击用户窗体后。 就会在发生 Resize 事件两次因为 Click 事件代码更改,同时 宽度 属性和用户窗体 高度 属性。 关闭用户窗体初始
7、化 QueryClose 事件。 QueryClose 事件显示消息框,其中包含您在代码中赋予用户窗体, 初始化 事件的标题。 您可以使用该 QueryClose 事件时要执行一组特定的操作,如果用户关闭用户窗体。 然后, 终止 事件将产生一个消息框,表明用户窗体的标题 UserForm1。 在 终止 事件从内存中删除用户窗体,并且用户窗体的标题返回到其原始的状态之后发生。 本主题由 82077802 于 2009-9-24 10:19 审核通过收藏 分享 评分 回复 引用 订阅 TOP long_xiang 2# 如何防止用户窗体被关闭,通过使用关闭按钮运行用户窗体时, 关闭 按钮添加到用户
8、窗体窗口的右上角。 如果要防止用户窗体被关闭,通过使用 关闭 按钮,您必须捕获 QueryClose 事件。 用户窗体是从内存中卸载之前, QueryClose 事件发生。 使用 CloseMode QueryClose 事件的参数确定如何关闭用户窗体。 vbFormControlMenu CloseMode 参数表示的 关闭 按钮被单击。 若要保持活动的用户窗体,请将 QueryClose 事件的 取消 参数设置为 True 。 要用于防止用户窗体通过使用 关闭 按钮关闭 QueryClose 事件请按照下列步骤操作: 1. 在 Excel 中创建一个新的工作簿。 2. 在 工具 菜单上指向
9、 宏 ,然后单击 Visual Basic 编辑器 。 3. 在 插入 菜单中上, 单击插入工作簿中的用户窗体的 用户窗体 。 4. 将 命令按钮 控件添加到用户窗体中。 5. 双击要显示的用户窗体的代码窗口的 用户窗体 。 6. 在代码窗口中键入以下代码: Private Sub CommandButton1_Click() Unload MeEnd SubPrivate Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) IF CloseMode = vbFormControlMenu Then Cancel =
10、 True Me.Caption = “Click the CommandButton to close Me!“ End IfEnd Sub7. 在 运行 菜单上单击 运行子过程/用户窗体 。当您单击 关闭 的按钮时,用户窗体未关闭。 必须单击关闭用户窗体 按钮 控件。 VBA 代码 Excel 包含 15 个不同的控件,您可以在用户窗体上使用。 此部分包含以编程方式使用这些控件的各种示例。 如何使用设计模式中编辑控件当您使用 Visual Basic 编辑器设计一个对话框时,您正在使用设计模式。设计方式,您可以编辑控件并您可以更改用户在属性窗口中窗体上控件的属性。 若要显示在 视图 菜单上
11、的属性窗口,请单击 属性窗口 。 请注意 您在设计模式中时,控件不响应的事件。 当您运行一个对话框,用户看到的方式显示时,程序处于运行模式。 从内存中卸载用户窗体时,不保留所做的更改在运行模式中控件的属性。 发表于 2009-9-24 10:23 | 只看该作者 列兵请注意 控件响应在运行模式中的事件。 如何在用户窗体上的控件引用如何引用控件以编程方式取决于运行代码的 VBA 模块工作表的类型。 如果运行的代码从常规模块,语法是下列: UserFormName.Controlname.Property = Value如果要将名为 TextBox1 UserForm1 名为 Bob 的值的用户窗
12、体上的 文本框 控件的 Text 属性设置,使用下面的代码: UserForm1.TextBox1.Text = “Bob“如果代码是在用户窗体或控件的事件启动的过程中,您不必非要指向用户窗体的名称。 而,使用下面的代码: TextBox1.Text = “Bob“时代码附加到对象,代码附加到的其中一个对象的事件。 许多在本文的示例中,可将代码附加到 按钮 对象的 Click 事件。 回复 引用 TOP long_xiang 列兵3# 发表于 2009-9-24 10:24 | 只看该作者 标签控件标签 控件主要用于描述在用户窗体上的其他控件。 用户窗体运行时,不能由用户编辑一个 Label
13、控件。 使用 标题 属性设置或返回一个 Label 控件中的文本。 格式设置 Label 控件的其他常用的属性包括 Font 属性和 前景色 属性。 如何使用 WITH 语句设置标签控件的格式要使用 WITH 语句更改的 标签 控件的属性,请岃 鎸夌収涓嬪垪姝 鎿嶄綔: 1. 启动 Excel,然后打开一个新的空白工作簿。 2. 在 工具 菜单上指向 宏 ,然后单击 Visual Basic 编辑器 。 3. 在 插入 菜单中上, 单击插入工作簿中的用户窗体的 用户窗体 。 4. 向用户窗体添加一个 Label 控件。 5. 将 命令按钮 控件添加到用户窗体中。 6. 双击以打开代码窗口的用户
14、窗体 按钮 控件。 7. 在代码窗口中键入 CommandButton1 Click 事件以下代码: Private Sub CommandButton1_Click() With Label1 Set the text of the label. .Caption = “This is Label Example 1“ Automatically size the label control. .AutoSize = True .WordWrap = False Set the font used by the Label control. .Font.Name = “Times New R
15、oman“ .Font.Size = 14 .Font.Bold = True Set the font color to blue. .ForeColor = RGB(0, 0, 255) End WithEnd Sub8. 在 运行 菜单上单击 运行子过程/用户窗体 。 9. 单击该 按钮 。文本“这是标签示例 1“出现在 标签 控件中加粗黑体字体大小为 14。 文本框控件文本框 控件经常用于收集用户的输入。 文本 属性包含由 文本框 控件中,项。 如何使用文本框控件验证密码如果将 文本框 控件的 PasswordChar 属性设置,它将成为“屏蔽的编辑“控件。 每个 文本框 控件中键入的
16、字符将替换为以可视方式您指定的字符。 要使用 TextBox 控件验证密码,请璇锋寜鐓 笅鍒楁 楠 搷浣滐細 1. 启动 Excel,然后打开一个新的空白工作簿。 2. 在 工具 菜单上指向 宏 ,然后单击 Visual Basic 编辑器 。 3. 在 插入 菜单中上, 单击插入工作簿中的用户窗体的 用户窗体 。 4. 将 文本框 控件添加到用户窗体中。 5. 在 视图 菜单中上, 单击 属性 ,以使属性窗口。 6. 在 文本框 控件的 PasswordChar 属性中,键入 * 。 请注意 您正将值改为星号。 7. 将 命令按钮 控件添加到用户窗体中。 8. 双击以打开代码窗口的用户窗体
17、按钮 控件。 9. 在代码窗口中键入 CommandButton1 Click 事件以下代码: Private Sub CommandButton1_Click() If TextBox1.Text “userform“ Then MsgBox “Password is Incorrect. Please reenter.“ TextBox1.Text = “ TextBox1.SetFocus Else MsgBox “Welcome!“ Unload Me End IfEnd Sub10.在 运行 菜单上单击 运行子过程/用户窗体 。 11.键入该密码 userform 文本框 控件。 1
18、2.单击 命令按钮 控件。此的示例对于密码是“userform“。 如果您键入一个不正确的密码,您会收到一个消息框,指出您的密码不正确、 文本框 控件已清除,然后重新键入密码。 当您键入正确的密码时, 您会收到一欢迎使用条消息,并关闭用户窗体。 回复 引用 TOP long_xiang 列兵4# 发表于 2009-9-24 10:25 | 只看该作者 命令按钮控件可以使用启动 VBA 过程的一个 命令按钮 控件。 在 VBA 过程通常附加到 命令按钮 控件的 Click 事件。 若要用于 Click 事件发生时运行一个过程的 命令按钮 控件,请按照下列步骤操作: 1. 启动 Excel,然后打
19、开一个新的空白工作簿。 2. 在 工具 菜单上指向 宏 ,然后单击 Visual Basic 编辑器 。 3. 在 插入 菜单中上, 单击插入工作簿中的用户窗体的 用户窗体 。 4. 将 命令按钮 控件添加到用户窗体中。 5. 双击 命令按钮 控件的用户窗体显示代码窗口。 6. 在代码窗口中键入以下代码: Private Sub CommandButton1_Click() red = Int(Rnd * 255) green = Int(Rnd * 255) blue = Int(Rnd * 255) CommandButton1.BackColor = RGB(red, green, bl
20、ue)End Sub 7. 在 运行 菜单上单击 运行子过程/用户窗体 。背景色 CommandButton1 的控件更改每次单击它。列表框 控件的目的是为用户提供的项目若要从选择列表中。 您可以将项目列表中的为 列表框 控件在 Excel 工作表上的存储。 若要填充工作表上单元格的范围 列表框 控件,使用 行来源 属性。当您使用 MultiSelect 属性时,您可以接受多个选定内容设置 列表框 控件。 如何从列表框控件中获取当前选定的项返回当前选定的项中使用 Value 属性的 列表框 控件。 要在单个选择 列表框 控件中返回当前选定的项,请按照这些步骤操作: 1. 启动 Excel,然后
21、打开一个新的空白工作簿。 2. 在工作表 Sheet1 上单元格 A1:A5,键入要使用来填充 列表框 控件的值。 3. 在 工具 菜单上指向 宏 ,然后单击 Visual Basic 编辑器 。 4. 在 插入 菜单中上, 单击插入工作簿中的用户窗体的 用户窗体 。 5. 将 列表框 控件添加到用户窗体中。 6. 双击 列表框 控件显示 列表框 控件的代码窗口。 7. 在代码窗口中键入 ListBox1 Click 事件以下代码: Private Sub ListBox1_Click() MsgBox ListBox1.ValueEnd Sub 8. 在 运行 菜单上单击 运行子过程/用户窗
22、体 。当,请单击列表中的项目时,当前选定的项将出现一个消息框。 濡備綍鑾峰彇多个选择列表框控件中的选定的项若要确定在多个选择 列表框 控件中选定的项目,必须遍历列表中的所有项目,然后查询的 选择 属性。 要将当前所选的项返回多个选择 列表框 控件中,请按照这些步骤操作: 1. 启动 Excel,然后打开一个新的空白工作簿。 2. 在工作表 Sheet1 上单元格 A1:A5,键入要使用来填充 列表框 控件的值。 3. 在 工具 菜单上指向 宏 ,然后单击 Visual Basic 编辑器 。 4. 在 插入 菜单中上, 单击插入工作簿中的用户窗体的 用户窗体 。 5. 将 列表框 控件添加到用
23、户窗体中。 6. 在 视图 菜单中上, 单击 属性 ,请参阅属性窗口。 7. 键入表示为以下 列表框 控件属性的值: Property Value - - MultiSelect 1 - frmMultiSelectMulti RowSource Sheet1!A1:A88. 将 命令按钮 控件添加到用户窗体中。 9. 双击 命令按钮 控件的用户窗体显示代码窗口。 10.在代码窗口中键入 CommandButton1 Click 事件以下代码: Sub CommandButton1_Click () Loop through the items in the ListBox. For x =
24、0 to ListBox1.ListCount - 1 If the item is selected. If ListBox1.Selected(x) = True Then display the Selected item. MsgBox ListBox1.List(x) End If Next x End Sub 11.在 运行 菜单上单击 运行子过程/用户窗体 。 12.选择列表中的一个或多个的项。 13.单击 CommandButton1 。单击 CommandButton1 后,您在 列表框 控件中选定的每一项将出现在单独的消息框中。 在消息框中显示所选的所有项目后,用户窗体自动
25、关闭。 如何填充列表框控件与单元格在工作表上的使用行来源属性要用于填充 列表框 控件区域的单元格在工作表上 行来源 属性,请按照下列步骤操作: 1. 启动 Excel,然后打开一个新的空白工作簿。 2. 在工作表 Sheet1 上单元格 A1:A5,键入要使用来填充 列表框 控件的值。 3. 在 工具 菜单上指向 宏 ,然后单击 Visual Basic 编辑器 。 4. 在 插入 菜单中上, 单击插入工作簿中的用户窗体的 用户窗体 。 5. 将 列表框 控件添加到用户窗体中。 6. 将 命令按钮 控件添加到用户窗体中。 7. 双击 命令按钮 控件的用户窗体显示代码窗口。 8. 在代码窗口中键
26、入 CommandButton1 Click 事件以下代码: Private Sub CommandButton1_Click() ListBox1.RowSource = “=Sheet1!A1:A5“End Sub 9. 在 运行 菜单上单击 运行子过程/用户窗体 。 请注意 ListBox1 不包含任何值。 10.单击 CommandButton1 。填充, ListBox1 填充工作表 Sheet1 上单元格 A1:A5 中值。 如何填充数组中值列表框控件本示例显示如何填充 列表框 控件与一个数组变量。 您必须为分配值从数组中 列表框 控件的一项一次。通常,此过程要求您使用一个 For
27、 Next 循环,如一个循环结构结构。 要填充 列表框 控件与一个数组变量,请按照这些步骤操作: 1. 启动 Excel,然后打开一个新的空白工作簿。 2. 在 工具 菜单上指向 宏 ,然后单击 Visual Basic 编辑器 。 3. 在 插入 菜单中上, 单击插入工作簿中的用户窗体的 用户窗体 。 4. 将 列表框 控件添加到用户窗体中。 5. 在 插入 菜单中上, 单击 模块 以插入模块工作表。 6. 在代码窗口中键入以下代码: Sub PopulateListBox() Dim MyArray As Variant Dim Ctr As Integer MyArray = Array
28、(“Apples“, “Oranges“, “Peaches“, “Bananas“, “Pineapples“) For Ctr = LBound(MyArray) To UBound(MyArray) UserForm1.ListBox1.AddItem MyArray(Ctr) Next UserForm1.ShowEnd Sub 7. 在 工具 菜单上单击 宏 并单击 PopulateListBox ,然后单击 运行 。PopulateListBox 过程生成一个简单数组数组,然后添加项数组中到 列表框 控件使用 AddItem 方法。 然后,用户窗体显示。 回复 引用 TOP lon
29、g_xiang 5# 发表于 2009-9-24 10:25 | 只看该作者 如何使用工作表上单元格的水平区域填充列表框控件如果将的 列表框 控件 行来源 属性设置为单元格的水平区域,只是在的第一个值将将出现在 列表框 控件中。列兵要通过使用 AddItem 方法填充 列表框 控件水平区域的单元格,请按照这些步骤操作: 1. 启动 Excel,然后打开一个新的空白工作簿。 2. 在工作表 Sheet1 上单元格 A1:E1,键入要使用来填充 列表框 控件的值。 3. 在 工具 菜单上指向 宏 ,然后单击 Visual Basic 编辑器 。 4. 在 插入 菜单中上, 单击插入工作簿中的用户窗
30、体的 用户窗体 。 5. 将 列表框 控件添加到用户窗体中。 6. 在 插入 菜单中上, 单击 模块 以插入模块工作表。 7. 在代码窗口中键入以下代码: Sub PopulateListWithHorizontalRange() For Each x In Sheet1.Range(“A1:E1“) UserForm1.ListBox1.AddItem x.Value Next UserForm1.ShowEnd Sub8. 在 工具 菜单上单击 宏 并单击 PopulateListWithHorizontalRange ,然后单击 运行 。该宏的过程循环一次向 ListBox1 一值的单元
31、格 A1:E5 Sheet1。请注意 工作表 Sheet1 上 ListBox1 不绑定到的单元格 A1:E5。 如何从绑定到多个数据列的列表框控件中返回多个值您可以设置 列表框 控件显示数据的多个列的格式。 这意味着在 列表框 控件列表的每一行上显示多个项目。 要从列表中选定项目返回多个值,请按照下列步骤操作: 1. 启动 Excel,然后打开一个新的空白工作簿。 2. 在工作表 Sheet1 上的指示的单元格中键入以下数据: 收起该表格展开该表格A1: 年 B1: 区域 C1: 销售瑙 g 瓟 2: 1996 年 B2: 鍖 c2: 140瑙 g 瓟 3: 1996 年 B3: 鍗 c3:
32、 210瑙 g 瓟 4: 1997 年 B4: 鍖 c4: 190瑙 g 瓟 5: 1997 年 B5: 鍗 c5: 1953.4. 在 工具 菜单上指向 宏 ,然后单击 Visual Basic 编辑器 。 5. 在 插入 菜单中上, 单击插入工作簿中的用户窗体的 用户窗体 。 6. 向用户窗体添加一个 Label 控件。 7. 将 列表框 控件添加到用户窗体中。 8. 右键单击该 列表框 中,然后单击 属性 。 9. 键入或选择下表中列出的以下属性的 列表框 控件表示的值: Property Value - BoundColumn 1 ColumnCount 3 ColumnHeads T
33、rue RowSource Sheet1!A2:A510.双击 列表框 控件显示 列表框 控件的代码窗口。 11.在代码窗口中键入以下代码: Private Sub ListBox1_Change() Dim SourceData As Range Dim Val1 As String, Val2 As String, Val3 As String Set SourceRange = Range(ListBox1.RowSource) Val1 = ListBox1.Value Val2 = SourceRange.Offset(ListBox1.ListIndex, 1).Resize(1,
34、 1).Value Val3 = SourceRange.Offset(ListBox1.ListIndex, 2).Resize(1, 1).Value Label1.Caption = Val1 & “ “ & Val2 & “ “ & Val3End Sub12.在 运行 菜单上单击 运行子过程/用户窗体 。单击 列表框 控件中的项,标签改为显示所有三个项目的项。 如何从列表框控件所绑定到工作表中删除所有项目若要从 列表框 控件所绑定到工作表中删除所有项目,请清除存储在 行来源 属性中的值。 要从 列表框 控件所绑定到工作表中删除项,请按照下列步骤操作: 1. 启动 Excel,然后打开
35、一个新的空白工作簿。 2. 在工作表 Sheet1 上单元格 A1:A5,键入要使用来填充 列表框 控件的值。 3. 在 工具 菜单上指向 宏 ,然后单击 Visual Basic 编辑器 。 4. 在 插入 菜单中上, 单击插入工作簿中的用户窗体的 用户窗体 。 5. 将 列表框 控件添加到用户窗体中。 6. 右键单击 列表框 控件,然后单击 属性 。 7. 在 行来源 属性键入 Sheet1! A1:A5 。 8. 将 命令按钮 控件添加到用户窗体中。 9. 双击 命令按钮 控件以显示 命令按钮 控件的代码窗口。 10.在代码窗口中键入 CommandButton1 Click 事件以下代码: Private Sub CommandButton1_Click() ListBox1.RowSource = “End Sub11.在 运行 菜单上单击 运行子过程/用户窗体 。 用您在工作表 Sheet1 上输入的值填充 列表框 控件添加到用户窗体中的。