Автозаполнение текстового поля в Excel VBA - PullRequest
0 голосов
/ 01 ноября 2011

Я создаю таблицу Excel, которая будет автоматически заполнять текст на основе текста, представленного в определенном столбце. После попытки сделать его самостоятельно безуспешно, я искал в Интернете примеры кодов, которые я мог бы изменить и включить в свою программу. (и не плагиат)

Я скачал 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. Это не встроенная функция и нигде не определено. Тем не менее код работает нормально. Я очень любопытный.

Спасибо

1 Ответ

2 голосов
/ 01 ноября 2011

.AutoComplete является функцией объекта Range - он основан на передаче текста в диапазон, который существует в другом месте на листе.

Документацию по этой функции вы можете посмотреть здесь: http://msdn.microsoft.com/en-us/library/bb209667(v=office.12).aspx

Функция myAutoComplete обрабатывает поиск данных автозаполнения по диапазону, если он существует, а другие фрагменты кода предназначены для выделения правильного фрагмента текста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...