close

'選取特定儲存格時,會啟動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


 

arrow
arrow

    chrisovo 發表在 痞客邦 留言(0) 人氣()