2011-11-01 61 views
0

我正在創建一個基於特定列中的文本自動完成文本的Excel表。在嘗試讓自己失敗後,我在網上查找了可以修改並加入我的程序的示例代碼。 (而不是剽竊)在excel中自動完成文本框VBA

我下載Workbook1.xls從http://www.ozgrid.com/forum/showthread.php?t=144438

的代碼是

Option Explicit 

Dim ufEventsDisabled As Boolean 
Dim autoCompleteEnabled As Boolean 
Dim oRange As Range 

Private Sub TextBox1_Change() 
    If ufEventsDisabled Then Exit Sub 
    If autoCompleteEnabled Then Call myAutoComplete(TextBox1) 
End Sub 

Sub myAutoComplete(aTextBox As MSForms.TextBox) 
    Dim RestOfCompletion As String 
    On Error GoTo Halt 
    With aTextBox 
     If .SelStart + .SelLength = Len(.Text) Then 
      RestOfCompletion = Mid(oRange.Cells(1, 1).AutoComplete(.Text), Len(.Text) + 1) 
      ufEventsDisabled = True 
      .Text = .Text & RestOfCompletion 
      .SelStart = Len(.Text) - Len(RestOfCompletion) 
      .SelLength = Len(RestOfCompletion) 
     End If 
    End With 
Halt: 
ufEventsDisabled = False 
On Error GoTo 0 
End Sub 

Private Sub TextBox1_AfterUpdate() 
    Dim strCompleted As String 
    With TextBox1 
     strCompleted = oRange.AutoComplete(.Text) 
     If LCase(strCompleted) = LCase(.Text) Then 
      ufEventsDisabled = True 
      .Text = strCompleted 
      ufEventsDisabled = False 
     End If 
    End With 
End Sub 

Private Sub TextBox1_Enter() 
    Set oRange = ThisWorkbook.Sheets("Sheet1").Range("f4") 
End Sub 

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 
    autoCompleteEnabled = KeyCode <> vbKeyBack 
    autoCompleteEnabled = ((vbKey0 <= KeyCode) And (KeyCode <= vbKeyZ)) 
End Sub 

Private Sub CommandButton1_Click() 
    Unload Me 
End Sub 

Private Sub UserForm_Click() 

End Sub 

如果你注意到線RestOfCompletion = MID(oRange.Cells(1,1)。 AutoComplete(.Text),Len(.Text)+ 1),我想知道AutoComplete在這裏做什麼。它不是一個內置的函數,並沒有在任何地方定義。代碼運行良好。我很好奇。

由於

回答

2

的.AutoComplete是Range對象的功能 - 它是基於文本傳遞給片材上的其它地方存在的範圍。

你可以看到這個功能在這裏的文檔: http://msdn.microsoft.com/en-us/library/bb209667(v=office.12).aspx

的myAutoComplete函數處理針對的範圍內自動完成數據的發現,如果它存在,而其他部分的代碼是突出正確件的文字。

+0

謝謝..這是有道理的..我是一個新的VBA程序員,並試圖從其他代碼學習.. – Ank