下面我们将查看Excel VBA中的一个程序,该程序创建一个交互式Userform。我们将要创建的用户窗体如下所示:
说明:每当您在ID文本框中输入一个值时,Excel VBA就会加载相应的记录。当您单击“编辑/添加”按钮时,Excel VBA将在工作表上编辑记录,或者在ID不存在时添加记录。清除按钮将清除所有文本框。关闭按钮关闭用户窗体。
要创建此用户窗体,请执行以下步骤。
1.打开Visual Basic编辑器。如果“项目资源管理器”不可见,请单击“视图”,“项目资源管理器”。
2.单击插入,用户窗体。如果“工具箱”没有自动出现,请单击“视图”,“工具箱”。屏幕设置如下。
3.添加标签,文本框(第一个在顶部,第二个在第一个下方,依此类推)和命令按钮。完成此操作后,结果应与前面显示的用户窗体的图片一致。例如,通过在工具箱中单击TextBox创建一个文本框控件。接下来,您可以在用户窗体上拖动一个文本框。
4.您可以更改控件的名称和标题。在Excel VBA代码中使用名称。字幕是显示在屏幕上的字幕。更改控件的名称是一种很好的做法,但是此处没有必要,因为在此示例中,我们只有几个控件。要更改标签,文本框和命令按钮的标题,请单击“视图”,“属性窗口”,然后单击每个控件。
5.要显示用户窗体,请在工作表上放置一个命令按钮,并添加以下代码行:
UserForm1.Show
End Sub
现在,我们将创建Sub UserForm_Initialize。当您对用户窗体使用Show方法时,此子项将自动执行。
6.打开Visual Basic编辑器。
7.在Project Explorer中,右键单击UserForm1,然后单击“查看代码”。
8.从左侧下拉列表中选择“用户表单”。从右侧的下拉列表中选择初始化。
9.添加以下代码行:
TextBox1.SetFocus
结束 子
说明:此代码行将焦点设置在第一个文本框上,因为这是我们在加载用户窗体时要开始的位置。
现在,我们已经创建了用户表单的第一部分。尽管看起来已经很整洁,但是当我们在ID文本框中输入一个值或单击命令按钮之一时,什么也不会发生。
10.在Project Explorer中,右键单击UserForm1,然后单击“查看代码”。
11.从左侧下拉列表中选择TextBox1。从右边的下拉列表中选择更改。
12.添加以下代码行:
GetData
结束 子
13.在Project Explorer中,双击UserForm1。
14.双击“编辑/添加”命令按钮。
15.添加以下代码行:
EditAdd
结束 子
16.双击清除命令按钮。
17.添加以下代码行:
ClearForm
结束 子
说明:这些子调用将在第二秒创建其他子调用。
18.双击关闭命令按钮。
19.添加以下代码行:
卸载我
End Sub
说明:此代码行关闭用户窗体。
是时候创建潜艇了。您可以浏览我们的功能和子章节以了解有关子的更多信息。如果您有急事,只需将以下子项放入模块中(在Visual Basic编辑器中,单击“插入”,“模块”)。
20.首先,声明三个Integer类型的变量和一个Boolean类型的变量。在“常规声明”部分(在模块顶部)声明变量。这样,您只需要声明一次变量,就可以在多个子变量中使用它们。
21.添加GetData子项。
如果则IsNumeric(UserForm1.TextBox1.Value)然后
标志= 假
I = 0
的id = UserForm1.TextBox1.Value
待办事项 虽然细胞第(i + 1,1)。价值<> “”
如果细胞(I + 1, 1)。价值= ID 接着
标志= 真
对于 J = 2 向 3个
UserForm1.Controls( “文本框” &J)。价值=细胞第(i + 1,j)的。价值
接着 Ĵ
结束 如果
I = I + 1
循环
如果标志= False 然后
对于 j = 2 到 3
UserForm1.Controls(“ TextBox”&j).Value =“”
下一个 j
结束, 如果
其他
ClearForm
结束, 如果
结束 Sub
说明:如果“ ID”文本框包含数字值,则Excel VBA将搜索ID并加载相应的记录。我们使用控件集合轻松地循环浏览文本框。如果Excel VBA找不到ID(标志仍然为False),它将清空第二个和第三个文本框。如果“ ID”文本框不包含数值,则Excel VBA会调用ClearForm子项。
22.添加ClearForm子项。
对于 j = 1 到 3
UserForm1.Controls(“ TextBox”&j).Value =“”
下一个 j
结束 Sub
说明:Excel VBA清除所有文本框。
23.添加EditAdd子项。
Dim emptyRow 为 Long,
如果 UserForm1.TextBox1.Value <>“” 然后
标志= False
i = 0
id = UserForm1.TextBox1.Value
emptyRow = WorksheetFunction.CountA(Range(“ A:A”))+ 1
做 While单元格(i + 1,1).Value <>“”
如果单元格(i + 1,1).Value = id 则
标志= True
对于 j = 2 至 3个
单元格(i + 1,j).Value = UserForm1 .Controls(“ TextBox”&j)。值
下一 j
结束 如果
i = i + 1
循环
如果 flag = False, 则
对于 j = 1 到 3个
单元格(emptyRow,j).Value = UserForm1.Controls(“ TextBox”&j).Value
下一个 j
End 如果
End 如果
End Sub
说明:如果“ ID”文本框不为空,则Excel VBA会在工作表上编辑记录(与前面看到的加载记录相反)。如果Excel VBA找不到ID(标志仍然为False),它将记录添加到下一个空行。变量emptyRow是第一个空行,每次添加记录时都会增加。
24.退出Visual Basic编辑器,在第1行中输入下面显示的标签,然后测试用户窗体。