久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

仿Google輸入框——快速查找列表框中的項(xiàng)目

 yuxinrong 2009-12-19
在使用Google搜索時(shí),,一般我們會(huì)在輸入框中輸入想要搜索的文本,此時(shí)下方會(huì)出現(xiàn)相關(guān)條目供選擇,,以方便快速輸入,。下面,,我們?cè)贓xcel用戶窗體中使用文本框和列表框來仿造這樣的效果,。
有時(shí),當(dāng)用戶窗體中的列表框包含大量的項(xiàng)目時(shí),,我們必須拖動(dòng)其滾動(dòng)條來查找相應(yīng)的項(xiàng)目,。此時(shí),可以利用一些技巧快速找到所需的項(xiàng)目,。
如圖1所示,,在用戶窗體中,放置有兩個(gè)控件,,上方是一個(gè)名為txtFind的文本框,下方是一個(gè)名為lbxData的列表框,列表框的數(shù)據(jù)來自工作表Data的列A中的數(shù)據(jù),。
ListBoxFilter1
圖1:帶有文本框和列表框的用戶窗體,列表框中的數(shù)據(jù)來自Data工作表中的A列
當(dāng)我在上方的文本框txtFind中輸入“excel vba”后,,下方的列表框lbxData中將會(huì)只出現(xiàn)包含有“excel vba”的條目,,如圖2所示,。
ListBoxFilter2
圖2:在文本框中輸入文本后,列表框中只出現(xiàn)包含該文本的條目
實(shí)現(xiàn)上述效果的VBA代碼如下:
Option Explicit
Dim varData
 
Private Sub txtFind_Change()
Dim i As Long
Dim strFind As String
 
strFind = "*" & UCase(Me.txtFind.Text) & "*"
 
With Me.lbxData
.List = varData
For i = .ListCount - 1 To 0 Step -1
If Not UCase(.List(i)) Like strFind Then
.RemoveItem i
End If
Next i
End With
End Sub
 
Private Sub UserForm_Initialize()
Dim lLast As Long
Dim rng As Range
 
lLast = Sheet1.Range("A" & Cells.Rows.Count).End(xlUp).Row
varData = Sheet1.Range("A1:A" & lLast)
 
Me.lbxData.List = varData
End Sub

我們可以將UserForm_Initialize代碼塊中的代碼Me.lbxData.List = varData刪除,,這樣當(dāng)在文本框txtFind中輸入時(shí),只要輸入的數(shù)據(jù)符合列表框包含的數(shù)據(jù),,列表框中將自動(dòng)出現(xiàn)相關(guān)條目并隨著輸入的進(jìn)一步具體條目相應(yīng)減少至完全匹配輸入的數(shù)據(jù),,如圖3、4,、5所示,。
ListBoxFilter3
圖3:初始化后的用戶窗體
ListBoxFilter4
圖4:開始輸入后,列表框中的條目隨著文本框中輸入的數(shù)據(jù)而變化
ListBoxFilter5
圖5:文本框中的數(shù)據(jù)越具體,,列表框中的條目也越少且與文本框輸入相匹配
在Excel 2000及以后的版本中,,VBA提供了一個(gè)Filter函數(shù),使用該函數(shù),,也能實(shí)現(xiàn)上述效果,并且代碼更簡(jiǎn)單,。代碼如下:

Option Explicit
Private Sub txtFind_Change()
Dim varData As Variant
 
varData = Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value
varData = Application.Transpose(varData)
 
varData = Filter(SourceArray:=varData, _
Match:=txtFind.Value, _
Include:=True, _
Compare:=vbTextCompare)
 
Me.lbxData.List = varData
 
End Sub
 
Private Sub UserForm_Initialize()
 
Me.lbxData.List = Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value
End Sub

如果需要將列表框中所選擇的條目放到文本框中,,那么添加下面的代碼:

Private Sub lbxData_Click()
Me.txtFind.Value = Me.lbxData.Value
End Sub

示例文檔下載:
在使用Google搜索時(shí),一般我們會(huì)在輸入框中輸入想要搜索的文本,,此時(shí)下方會(huì)出現(xiàn)相關(guān)條目供選擇,,以方便快速輸入。下面,,我們?cè)贓xcel用戶窗體中使用文本框和列表框來仿造這樣的效果,。
有時(shí),當(dāng)用戶窗體中的列表框包含大量的項(xiàng)目時(shí),,我們必須拖動(dòng)其滾動(dòng)條來查找相應(yīng)的項(xiàng)目,。此時(shí),可以利用一些技巧快速找到所需的項(xiàng)目,。
如圖1所示,,在用戶窗體中,,放置有兩個(gè)控件,上方是一個(gè)名為txtFind的文本框,,下方是一個(gè)名為lbxData的列表框,,列表框的數(shù)據(jù)來自工作表Data的列A中的數(shù)據(jù)。
ListBoxFilter1
圖1:帶有文本框和列表框的用戶窗體,,列表框中的數(shù)據(jù)來自Data工作表中的A列
當(dāng)我在上方的文本框txtFind中輸入“excel vba”后,,下方的列表框lbxData中將會(huì)只出現(xiàn)包含有“excel vba”的條目,如圖2所示,。
ListBoxFilter2
圖2:在文本框中輸入文本后,列表框中只出現(xiàn)包含該文本的條目
實(shí)現(xiàn)上述效果的VBA代碼如下:

Option Explicit
Dim varData
 
Private Sub txtFind_Change()
Dim i As Long
Dim strFind As String
 
strFind = "*" & UCase(Me.txtFind.Text) & "*"
 
With Me.lbxData
.List = varData
For i = .ListCount - 1 To 0 Step -1
If Not UCase(.List(i)) Like strFind Then
.RemoveItem i
End If
Next i
End With
End Sub
 
Private Sub UserForm_Initialize()
Dim lLast As Long
Dim rng As Range
 
lLast = Sheet1.Range("A" & Cells.Rows.Count).End(xlUp).Row
varData = Sheet1.Range("A1:A" & lLast)
 
Me.lbxData.List = varData
End Sub

我們可以將UserForm_Initialize代碼塊中的代碼Me.lbxData.List = varData刪除,,這樣當(dāng)在文本框txtFind中輸入時(shí),,只要輸入的數(shù)據(jù)符合列表框包含的數(shù)據(jù),列表框中將自動(dòng)出現(xiàn)相關(guān)條目并隨著輸入的進(jìn)一步具體條目相應(yīng)減少至完全匹配輸入的數(shù)據(jù),,如圖3,、4、5所示,。
ListBoxFilter3
圖3:初始化后的用戶窗體
ListBoxFilter4
圖4:開始輸入后,,列表框中的條目隨著文本框中輸入的數(shù)據(jù)而變化
ListBoxFilter5
圖5:文本框中的數(shù)據(jù)越具體,列表框中的條目也越少且與文本框輸入相匹配
在Excel 2000及以后的版本中,,VBA提供了一個(gè)Filter函數(shù),,使用該函數(shù),也能實(shí)現(xiàn)上述效果,,并且代碼更簡(jiǎn)單,。代碼如下:

Option Explicit
Private Sub txtFind_Change()
Dim varData As Variant
 
varData = Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value
varData = Application.Transpose(varData)
 
varData = Filter(SourceArray:=varData, _
Match:=txtFind.Value, _
Include:=True, _
Compare:=vbTextCompare)
 
Me.lbxData.List = varData
 
End Sub
 
Private Sub UserForm_Initialize()
 
Me.lbxData.List = Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value
End Sub

如果需要將列表框中所選擇的條目放到文本框中,那么添加下面的代碼:

Private Sub lbxData_Click()
Me.txtFind.Value = Me.lbxData.Value
End Sub

示例文檔下載:

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多