链接用户窗体与工作表(续)
本文是《链接用户窗体与工作表》一文的续篇,在阅读本文之前,请先阅读《链接用户窗体与工作表》。
现在,我们需要使该用户窗体在原有功能的基础上增加搜索功能。当选择字段并输入相应的数据后,能搜索到记录并显示在用户窗体中,如图4所示。

图4:在用户窗体中增加搜索功能
在原窗体中添加一个框架,在框架内添加组合框、文本框和命令按钮,各控件的名称和Tag属性如下:
名称(Tag属性)
frmFind()
cmbFind()
txtFind()
cmdFind(tgFind)
其中,括号内为空表明没有设置该控件的Tag属性。
为了使用户能搜索任一字段,因此添加了组合框cmbFind。用户可以首先从中选择要搜索的字段,然后在右侧的文本框中输入要搜索数据的全部或部分内容,最后当单击查找按钮后在下方显示该条记录的信息。
要填充组合框,在用户窗体的初始化事件Initialize的代码中添加下列语句:
Me.cmbFind.List = Application.Transpose(wksContacts.Range(”ColHeads”).Value)
其中,ColHeads为工作表中标题行区域的名称。此时,在将该名称区域的数据放置到组合框之前,需要将列数据转置为行数据。
接下来,确保查找按钮处于禁用状态,直到在组合框和文本框中含有相应的数据。因此,添加了两个事件过程和一个启用/禁用按钮控件的过程。代码如下:
Private Sub cmbFind_Change()
‘如果用户已选择组合框中的项目或者在文本框中输入内容
‘那么启用查找按钮
If Me.cmbFind.ListIndex > -1 And Len(Me.txtFind.Text) > 0 Then
EnableControls “tgFind”
Else
EnableControls “tgFind”, True
End If
End Sub
Private Sub txtFind_Change()
If Me.cmbFind.ListIndex > -1 And Len(Me.txtFind.Text) > 0 Then
EnableControls “tgFind”
Else
EnableControls “tgFind”, True
End If
End Sub
Private Sub EnableControls(sTag As String, _
Optional bDisable As Boolean = False)
Dim ctl As Control
For Each ctl In Me.Controls
If ctl.Tag = sTag Then
ctl.Enabled = Not bDisable
End If
Next ctl
End Sub
查找按钮cmdFind的代码如下:
Private Sub cmdFind_Click()
Dim lCol As Long
Dim rFound As Range
‘因为组合框的ListIndex属性起始值为0,因此加1以确定搜索列
lCol = Me.cmbFind.ListIndex + 1
‘查找包含文本框中文本的第一个单元格
‘Lookat参数的值为xlPart表明不需要完全匹配
Set rFound = wksContacts.Columns(lCol).Find(What:=Me.txtFind.Text, _
LookIn:=xlValues, _
LookAt:=xlPart)
‘如果找到记录则改变滚动条到该记录
‘否则显示一条新记录
If Not rFound Is Nothing Then
Me.scbContact.Value = rFound.Row - 1
Else
Me.scbContact.Value = Me.scbContact.Max
End If
End Sub
至此,新增功能完成。当然,您可以按需要再添加其他功能,以丰富该窗体。
