造梦者新风系统怎么样:使用用户窗体查找工作表中满足条件的所有记录

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 18:20:53

《链接用户窗体与工作表》一文中曾经介绍了在用户窗体中显示工作表的数据的方法。这里,将介绍另一种情况,即在用户窗体中查找工作表中满足特定条件的所有记录,这是Dick的博客中所列举的一个示例,本文稍作修改。
如下图所示,在工作表Sheet1中,姓名为“张三”的共有三条记录,在姓名右侧的文本框中输入“张三”后,将自动显示第1条记录的相关内容,然后可以单击“前一条”和“后一条”按钮来回显示相关的记录。

首先,使用Find方法根据查找条件查找到满足条件的所有记录,并将其赋值给Range变量。接着,使用Property Set语句创建的自定义属性将Range变量存储的记录区域传递给用户窗体。为了确保引用的记录区域与工作表中出现的顺序相同,在Find方法中使用了After参数并将其值设置为搜索区域的最后一个单元格,这样Find方法将从单元格区域的第一个单元格开始搜索。
将用户窗体命名为UPos,其中的一些控件及其名称为:姓名文本框(txtName)、工作内容文本框(txtWork)、共有记录的文本框(txtY)、第几条记录的文本框(txtX)、前一条按钮(cmdPrev)、后一条按钮(cmdNext),还有一些标签控件。
在标准模块中输入下列代码:

Sub ShowPos()Dim ufPos As UPos '用户窗体变量    Dim rFound As Range '存储当前找到的单元格    Dim rNameRange As Range '要搜索的单元格区域    Dim sFirstAdd As String '第一个被找到的单元格的地址    Dim rAllFound As Range '所有找到的单元格'从用户处获取数据,这里为了介绍方便采用了硬编码    Const strName As String = "张三" Set rNameRange = Sheet1.Range("A2:A8") '查找    Set rFound = rNameRange.Find(strName, rNameRange(rNameRange.Cells.Count), xlValues, xlWhole) '如果找到    If Not rFound Is Nothing Then'存储第一个找到的单元格的地址        sFirstAdd = rFound.Address'添加找到的单元格到所有找到的单元格区域中        Set rAllFound = rFound'继续查找直到循环到开始处为止        DoSet rFound = rNameRange.FindNext(rFound)If rFound.Address <> sFirstAdd ThenSet rAllFound = Union(rAllFound, rFound)End IfLoop Until rFound.Address = sFirstAdd '创建用户窗体        Set ufPos = New UPos '传递单元格区域到用户窗体        Set ufPos.AllFound = rAllFound ufPos.InitializeufPos.ShowElseMsgBox "没有找到匹配的数据!"End If Set ufPos = Nothing End Sub

在用户窗体模块中,声明一些模块级的变量来包含传递的区域以及当前显示的区域。

Private mrAllFound As RangePrivate mrCurrent As Range Property Set AllFound(RHS As Range)Set mrAllFound = RHSEnd Property

在显示用户窗体之前,要初始化该窗体,使用查找到的第一条记录填充窗体中的相应控件。

Public Sub Initialize()'设置当前记录为第一条记录    If Not mrAllFound Is Nothing ThenSet mrCurrent = mrAllFound(1)Me.txtName.Text = mrCurrent.ValueMe.txtWork.Text = mrCurrent.Next.ValueMe.txtY.Text = mrAllFound.Cells.CountMe.txtX.Text = 1End IfEnd Sub

前一条按钮和后一条按钮使用FindPrevious方法和FindNext方法将记录移动到合适的位置。

Private Sub cmdNext_Click()'设置当前单元格    Set mrCurrent = mrAllFound.FindNext(mrCurrent) Me.txtName.Text = mrCurrent.ValueMe.txtWork.Text = mrCurrent.Next.Value '增加计数器值    Me.txtX.Text = Me.txtX.Text + 1End Sub Private Sub cmdPrev_Click()Set mrCurrent = mrAllFound.FindPrevious(mrCurrent)Me.txtName.Text = mrCurrent.ValueMe.txtWork.Text = mrCurrent.Next.ValueMe.txtX.Text = Me.txtX.Text - 1End Sub

最后,当第几条文本框中的值变化时,启用或禁用按钮使得用户不能试图到达不存在的记录。

Private Sub txtX_Change()'启用/禁用按钮    If Me.txtX.Text = 1 ThenMe.cmdPrev.Enabled = FalseElseMe.cmdPrev.Enabled = TrueEnd If If Me.txtX.Text = Me.txtY.Text ThenMe.cmdNext.Enabled = FalseElseMe.cmdNext.Enabled = TrueEnd IfEnd Sub
写出在CLASS表中查找满足条件的记录的SQL语句 写出在CLASS表中查找满足条件的记录的SQL语句 请写出在class表中查找满足如下条件的记录的SQL语句: SQL中要求满足某一条件的所有值 请写出在class和stu表中查找满足如下条件的记录的SQL语句: EXCEL中怎么用VLOOKUP查找同时满足两个条件的数值? 谢谢 写一个查询语句 件的SQL语句。请写出在class表中查找满足如下条件的SQL语句。 怎么用VLOOKUP查找同时满足两个条件的数值? 在EXCAL中,如何根据条件单元格中的条件在大量的数据表中查找符合条件的所有记录。。。 如何用父窗体的控件对子窗体中打开的文件实现查找的功能? 在VB中如何使用FindWindow或FindWindowEx函数查找某窗体句柄 构件正常工作时应满足的条件是指 在VB中怎样用窗体中的用户控件来拖动无标题的窗体? 当满足两个条件查找时如何VLOOKUP函数查找 在篮球比赛中满足回场的三个条件 (7) 在Exce12000中,快速查找数据清单中符合条件的记录,可使用Excel提供的【 】功能 为什么在QQ用户查找中没有伊宁市的用户 请问C#如何在一个类或一个窗体中使用用另一个窗体的控件? 关于使用QQ精确查找用户的问题。 求助:Access中如何使子窗体在拖入主窗体后达到1对1的效果,而不是把子窗体中的所有数据都显示出来? VB中如何控制MDI中所有子窗体的颜色 用QQ群用户查找中分类查找中找到的群怎么才能加入其中? EXCAL中类似VLOOKUP()函数中能否使用多个条件?比如查找身份证为XXXX同时年度为YYYY的行? Access中怎样从窗体传递参数到条件查询?