下面我们就来看看在Excel VBA程序创建一个交互式窗体。用户窗体,我们要创建如下所示:

Excel VBA Interactive Userform

说明:当你在ID文本框中输入一个值,Excel的VBA加载相应的记录。当您单击编辑/添加按钮,Excel的VBA编辑在纸张上的记录或增加时,ID不存在的记录。 Clear按钮清除所有文本框。关闭按钮关闭该窗体。

要创建这个用户窗体,请执行下列步骤。

1.打开Visual Basic编辑器。如果项目资源管理器中是不可见,单击视图,工程资源管理器。

2.单击插入,用户窗体。如果工具箱没有自动出现,单击视图,工具箱。您的屏幕应该设置如下。

Userform Screen Setup in Excel VBA

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行的标签和测试窗体。

Excel VBA Interactive Userform