'選取特定儲存格時,會啟動textbox、listbox的功能
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'當開始點犬儲存格時,隱藏TEXTBOX & LISTBOX
Dim i As Integer
ListBox.Clear
TextBox.Value = ""
ListBox.Visible = False
TextBox.Visible = False
'如果選取的欄數是1,且列數>=2,則開啟TEXTBOX & LISTBOX
If Target.Column = 1 And Target.Row >= 2 Then
'TEXTBOX的長寬高完全與選取的儲存格相等
With TextBox
.Activate
.Visible = True
.Left = Target.Left
.Width = Target.Width
.Top = Target.Top
.Height = Target.Height
End With
'設定LISTBOX出現的地方
With ListBox
.Visible = True
.Top = Target.Top
.Left = Target.Left + Target.Width
.Width = Target.Width * 2
.Height = Target.Height * 10
'將在工作表1的資料回寫至LISTBOX內
有另一種寫法為 Listbox.listfillrange = "工作表1!A2:C" & sheets(1).[A65535].end(xlup).row
但此寫法會無法使用listbox.clear將內容清除,之後用模糊查找的功能時會出現問題。
For i = 2 To Sheets("工作表1").[A36656].End(xlUp).Row
ListBox.AddItem Sheets(1).Cells(i, 1).Value
Next
End With
End If
End Sub
'雙擊listbox內的數值時會啟動的事件
Private Sub ListBox_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Application.EnableEvents = False
'將目前被選取的儲存格用雙擊的listbox數值取代,回填至儲存格中。
ActiveCell.Value = ListBox.Value
TextBox.Value = ""
ListBox.Visible = False
TextBox.Visible = False
ListBox.clear
Application.EnableEvents = True
End Sub
'模糊查找主要的程式
'keydown事件:當按下按鍵便會觸動
'keyup事件:當放開按鍵便會觸動
Private Sub TextBox_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim i As Integer
'須將原先的listbox先清空,出來的模糊查找才會是正確的。
ListBox.Clear
'只要輸入任何字元,便會觸發下列的查找迴圈
'如果輸入的數字 ucase(textbox.value) 有出現在 數據內 ucase(sheets(1).clees(i,1))內(結果 > 0)
'便會將該資料透過additem加到listbox內。
For i = 2 To Sheets("工作表1").[A36656].End(xlUp).Row
If InStr(UCase(Sheets("工作表1").Cells(i, 1).Value), UCase(TextBox.Value)) > 0 Then
ListBox.AddItem Sheets("工作表1").Cells(i, 1).Value
End If
Next
End Sub
留言列表