Excel的VBA用户窗体互动
下面我们就来看看在Excel VBA程序创建一个交互式窗体。用户窗体,我们要创建如下所示:
说明:当你在ID文本框中输入一个值,Excel的VBA加载相应的记录。当您单击编辑/添加按钮,Excel的VBA编辑在纸张上的记录或增加时,ID不存在的记录。 Clear按钮清除所有文本框。关闭按钮关闭该窗体。
要创建这个用户窗体,请执行下列步骤。
1.打开Visual Basic编辑器。如果项目资源管理器中是不可见,单击视图,工程资源管理器。
2.单击插入,用户窗体。如果工具箱没有自动出现,单击视图,工具箱。您的屏幕应该设置如下。
3.添加标签,文本框(第一顶部,下面的第一,第二,等等)和命令按钮。一旦这个已经完成,其结果应与前面显示的用户窗体的图片一致。例如,创建通过点击文本框从工具箱中的文本框控件。接下来,你可以在用户窗体拖动文本框。
4.您可以更改名称和控件的标题。名称在Excel的VBA代码中使用。标题是那些出现在屏幕上。这是改变控件的名称很好的做法,但在这里是没有必要的,因为我们只有几个控件在这个例子中。要更改标签,文本框和命令按钮的标题,单击视图,属性窗口,然后点击每个控件。
5.要显示用户窗体,放置在您的工作表一个命令按钮并添加以下代码行:
Private Sub CommandButton1_Click() UserForm1.Show End Sub
现在,我们要创建的子UserForm_Initialize。当您使用Show方法用于用户窗体,该子会被自动执行。
6.打开Visual Basic编辑器。
7.在项目资源管理器,右击UserForm1上,然后单击查看代码。
8.从左边的下拉列表中选择用户窗体。从右侧的下拉列表中选择初始化。
9.添加以下代码行:
Private Sub UserForm_Initialize() TextBox1.SetFocus End Sub
说明:这行代码将焦点设置在第一个文本框,因为这是我们想要加载用户窗体时开始。
我们现在已经创建用户窗体的第一部分。虽然看起来已经整齐,什么都不会,当我们在ID文本框中输入一个值,或当我们点击一个命令按钮还没有发生。
10.在项目资源管理器,右击UserForm1上,然后单击查看代码。
11.选择从左边的下拉列表TextBox1的。从右侧的下拉列表中选择更改。
12.添加以下代码行:
Private Sub TextBox1_Change() GetData End Sub
13.在Project Explorer中,UserForm1上双击。
14.双击编辑/添加命令按钮。
15.添加以下代码行:
Private Sub CommandButton1_Click() EditAdd End Sub
16.双击清除命令按钮。
17.添加以下代码行:
Private Sub CommandButton2_Click() ClearForm End Sub
说明:这些潜艇拨打我们将在第二个创建其他潜艇。
18.双击关闭命令按钮。
19.添加以下代码行:
Private Sub CommandButton3_Click() Unload Me End Sub
说明:此行代码关闭该窗体。
时间创造了潜艇。你可以通过我们的功能和次章,详细了解潜艇。如果你是在赶时间,只需将下面的潜艇到模块(在Visual Basic编辑器,单击插入,模块)。
20.首先,声明类型整数的三个变量和布尔型的一个变量。声明在通用声明部分(在模块的顶部)的变量。这样,你只需要声明变量一次,你可以在多个潜艇使用它们。
Dim id As Integer, i As Integer, j As Integer, flag As Boolean
21.添加的GetData子。
Sub GetData() If IsNumeric(UserForm1.TextBox1.Value) Then flag = False i = 0 id = UserForm1.TextBox1.Value Do While Cells(i + 1, 1).Value <> "" If Cells(i + 1, 1).Value = id Then flag = True For j = 2 To 3 UserForm1.Controls("TextBox" & j).Value = Cells(i + 1, j).Value Next j End If i = i + 1 Loop If flag = False Then For j = 2 To 3 UserForm1.Controls("TextBox" & j).Value = "" Next j End If Else ClearForm End If End Sub
控件集合通过文本框容易循环。如果Excel VBA找不到ID(标志仍然是假),它清空第二个和第三个文本框。如果ID文本框不包含数值时,Excel VBA调用ClearForm子。
22.添加ClearForm子。
Sub ClearForm() For j = 1 To 3 UserForm1.Controls("TextBox" & j).Value = "" Next j End Sub
说明:VBA Excel中清除所有文本框。
23.添加EditAdd子。
Sub EditAdd() Dim emptyRow As Long If UserForm1.TextBox1.Value <> "" Then flag = False i = 0 id = UserForm1.TextBox1.Value emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1 Do While Cells(i + 1, 1).Value <> "" If Cells(i + 1, 1).Value = id Then flag = True For j = 2 To 3 Cells(i + 1, j).Value = UserForm1.Controls("TextBox" & j).Value Next j End If i = i + 1 Loop If flag = False Then For j = 1 To 3 Cells(emptyRow, j).Value = UserForm1.Controls("TextBox" & j).Value Next j End If End If End Sub
解释:如果ID文本框不为空时,Excel VBA编辑在纸张上的记录(装载记录正如我们在前面看到的对面)。
如果Excel VBA找不到ID(标志仍然是假),它增加了记录下一个空行。变量emptyRow是第一个空行,并增加每次添加一个记录时间。
24.退出Visual Basic编辑器,进入下图所示为第1行的标签和测试窗体。