上一题下一题
跳转到
 
 
  世界如此多姿,发展如此迅速,窥一斑未必还能知全豹。但正如万花筒一样,每一个管窥都色彩斑斓。  
 
 
  知识通道 | 学习首页 | 教师首页 | PK首页 | 知识创造首页 | 企业首页 | 登录
 
本文对应知识领域
使用Excel用户窗体查找工作表记录
作者:admin 申领版权
2010年08月08日 共有 1390 次访问 【添加到收藏夹】 【我要附加题目
受欢迎度:
    今天介绍在用户窗体中查找工作表中满足特定条件的所有记录,如下图所示,在工作表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
    '继续查找直到循环到开始处为止
    Do
    Set rFound = rNameRange.FindNext(rFound)
    If rFound.Address <> sFirstAdd Then
    Set rAllFound = Union(rAllFound, rFound)
    End If
    Loop Until rFound.Address = sFirstAdd
    
    '创建用户窗体
    Set ufPos = New UPos
    
    '传递单元格区域到用户窗体
    Set ufPos.AllFound = rAllFound
    
    ufPos.Initialize
    ufPos.Show
    Else
    MsgBox "没有找到匹配的数据!"
    End If
    
    Set ufPos = Nothing
    
    End Sub

    在用户窗体模块中,声明一些模块级的变量来包含传递的区域以及当前显示的区域。 
    
    
Private mrAllFound As Range
    Private mrCurrent As Range
    
    Property Set AllFound(RHS As Range)
    Set mrAllFound = RHS
    End Property

    在显示用户窗体之前,要初始化该窗体,使用查找到的第一条记录填充窗体中的相应控件。 
    
    
Public Sub Initialize()
    '设置当前记录为第一条记录
    If Not mrAllFound Is Nothing Then
    Set mrCurrent = mrAllFound(1)
    Me.txtName.Text = mrCurrent.Value
    Me.txtWork.Text = mrCurrent.Next.Value
    Me.txtY.Text = mrAllFound.Cells.Count
    Me.txtX.Text = 1
    End If
    End Sub

    前一条按钮和后一条按钮使用FindPrevious方法和FindNext方法将记录移动到合适的位置。 
    
    
Private Sub cmdNext_Click()
    '设置当前单元格
    Set mrCurrent = mrAllFound.FindNext(mrCurrent)
    
    Me.txtName.Text = mrCurrent.Value
    Me.txtWork.Text = mrCurrent.Next.Value
    
    '增加计数器值
    Me.txtX.Text = Me.txtX.Text 1
    End Sub
    
    Private Sub cmdPrev_Click()
    Set mrCurrent = mrAllFound.FindPrevious(mrCurrent)
    Me.txtName.Text = mrCurrent.Value
    Me.txtWork.Text = mrCurrent.Next.Value
    Me.txtX.Text = Me.txtX.Text - 1
    End Sub

    最后,当第几条文本框中的值变化时,启用或禁用按钮使得用户不能试图到达不存在的记录。 
    
    
Private Sub txtX_Change()
    '启用/禁用按钮
    If Me.txtX.Text = 1 Then
    Me.cmdPrev.Enabled = False
    Else
    Me.cmdPrev.Enabled = True
    End If
    
    If Me.txtX.Text = Me.txtY.Text Then
    Me.cmdNext.Enabled = False
    Else
    Me.cmdNext.Enabled = True
    End If
    End Sub

    

 

相关新闻

让老板越看越爱的微图表
EXCEL使用讲义
IE中无法打开Word、Execl等Office文档的解决方法
Office2010全新认证方式 批量激活
用Office 2007套件实现PDF转DOC
Office2003个性化设置的导入导出技巧
Office2003个性化设置的导入与导出
改良窗口 让文件打开操作更加方便
OFFICE微调技术应用七列
人民币代号不会输?巧用Alt键自动生成

您可能对这些感兴趣  

Excel图表创建步骤
OFFICE操作技巧!文员财务都可以用
Office2010全新认证方式 批量激活
用Office 2007套件实现PDF转DOC
Office2003个性化设置的导入导出技巧
Office2003个性化设置的导入与导出
改良窗口 让文件打开操作更加方便
OFFICE微调技术应用七列
人民币代号不会输?巧用Alt键自动生成
全面保护office文档安全的六种方法

题目筛选器
日期:
类型:
状态:
得分: <=
分类:
作者:
职业:
关键字:
搜索

 
 
 
  焦点事件
 
  知识体系
 
  职业列表
 
 
  最热文章
 
 
  最多引用文章
 
 
  最新文章
 
 
 
 
网站介绍 | 广告服务 | 招聘信息 | 保护隐私权 | 免责条款 | 法律顾问 | 意见反馈
版权所有 不得转载
沪ICP备 10203777 号 联系电话:021-54428255
  帮助提示    
《我的太学》是一种全新的应用,您在操作中遇到疑问或者问题,请拨打电话13564659895,15921448526。
《我的太学》