国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 辦公 > Excel > 正文

使用Excel用戶窗體查找工作表記錄

2024-08-23 19:48:20
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

今天介紹在用戶窗體中查找工作表中滿足特定條件的所有記錄,如下圖所示,在工作表Sheet1中,姓名為“張三”的共有三條記錄,在姓名右側(cè)的文本框中輸入“張三”后,將自動(dòng)顯示第1條記錄的相關(guān)內(nèi)容,然后可以單擊“前一條”和“后一條”按鈕來(lái)回顯示相關(guān)的記錄。

    首先,使用Find方法根據(jù)查找條件查找到滿足條件的所有記錄,并將其賦值給Range變量。接著,使用PRoperty Set語(yǔ)句創(chuàng)建的自定義屬性將Range變量存儲(chǔ)的記錄區(qū)域傳遞給用戶窗體。為了確保引用的記錄區(qū)域與工作表中出現(xiàn)的順序相同,在Find方法中使用了After參數(shù)并將其值設(shè)置為搜索區(qū)域的最后一個(gè)單元格,這樣Find方法將從單元格區(qū)域的第一個(gè)單元格開(kāi)始搜索。

    將用戶窗體命名為UPos,其中的一些控件及其名稱為:姓名文本框(txtName)、工作內(nèi)容文本框(txtWork)、共有記錄的文本框(txtY)、第幾條記錄的文本框(txtX)、前一條按鈕(cmdPrev)、后一條按鈕(cmdNext),還有一些標(biāo)簽控件。

    在標(biāo)準(zhǔn)模塊中輸入下列代碼:

Sub ShowPos()
    Dim ufPos As UPos '用戶窗體變量
    Dim rFound As Range '存儲(chǔ)當(dāng)前找到的單元格
    Dim rNameRange As Range '要搜索的單元格區(qū)域
    Dim sFirstAdd As String '第一個(gè)被找到的單元格的地址
    Dim rAllFound As Range '所有找到的單元格
   
    '從用戶處獲取數(shù)據(jù),這里為了介紹方便采用了硬編碼
    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
        '存儲(chǔ)第一個(gè)找到的單元格的地址
        sFirstAdd = rFound.Address
        '添加找到的單元格到所有找到的單元格區(qū)域中
        Set rAllFound = rFound
        '繼續(xù)查找直到循環(huán)到開(kāi)始處為止
        Do
            Set rFound = rNameRange.FindNext(rFound)
            If rFound.Address <> sFirstAdd Then
                Set rAllFound = Union(rAllFound, rFound)
            End If
        Loop Until rFound.Address = sFirstAdd
 
        '創(chuàng)建用戶窗體
        Set ufPos = New UPos
 
        '傳遞單元格區(qū)域到用戶窗體
        Set ufPos.AllFound = rAllFound
 
        ufPos.Initialize
        ufPos.Show
    Else
        MsgBox "沒(méi)有找到匹配的數(shù)據(jù)!"
    End If
 
    Set ufPos = Nothing
 
End Sub

    在用戶窗體模塊中,聲明一些模塊級(jí)的變量來(lái)包含傳遞的區(qū)域以及當(dāng)前顯示的區(qū)域。 

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

    在顯示用戶窗體之前,要初始化該窗體,使用查找到的第一條記錄填充窗體中的相應(yīng)控件。 

Public Sub Initialize()
    '設(shè)置當(dāng)前記錄為第一條記錄
    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方法將記錄移動(dòng)到合適的位置。 

Private Sub cmdNext_Click()
    '設(shè)置當(dāng)前單元格
    Set mrCurrent = mrAllFound.FindNext(mrCurrent)
 
    Me.txtName.Text = mrCurrent.Value
    Me.txtWork.Text = mrCurrent.Next.Value
 
    '增加計(jì)數(shù)器值
    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

    最后,當(dāng)?shù)趲讞l文本框中的值變化時(shí),啟用或禁用按鈕使得用戶不能試圖到達(dá)不存在的記錄。 

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


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 龙海市| 徐州市| 扎赉特旗| 揭东县| 精河县| 宁南县| 错那县| 新郑市| 阜康市| 广南县| 沙河市| 昔阳县| 铜山县| 大厂| 思茅市| 普安县| 五指山市| 宜宾县| 肇庆市| 乌拉特中旗| 屯留县| 浪卡子县| 永福县| 四子王旗| 河池市| 贞丰县| 陆川县| 德安县| 安远县| 运城市| 汉源县| 长乐市| 肇源县| 建昌县| 兴和县| 富顺县| 克拉玛依市| 读书| 墨竹工卡县| 太原市| 连云港市|