Excel VBA UserForm Interactive
Ниже мы рассмотрим программу в Excel VBA, которая создает интерактивную UserForm. UserForm мы собираемся создать выглядит следующим образом:
Объяснение: всякий раз, когда вы вводите значение в текстовом поле ID, Excel VBA загружает соответствующую запись. При нажатии на кнопку Edit / Add, Excel VBA редактирует запись на листе или добавляет запись, когда идентификатор еще не существует. Кнопка Clear очищает все текстовые поля. Кнопка Закрыть закрывает UserForm.
Для создания этого UserForm, выполните следующие действия.
-
Откройте редактор Visual Basic. Если проводник проекта не отображается, нажмите кнопку Просмотр, Project Explorer.
-
Нажмите кнопку Вставить, UserForm. Если панель инструментов не появляется автоматически, нажмите кнопку View, Toolbox. Экран должен быть установлен, как показано ниже.
-
Добавьте метки, текстовые поля (первый в верхней части, второй ниже первого, и так далее) и кнопка управления. После того, как это было закончено, результат должен быть согласован с изображением UserForm, показанным ранее. Например, создать элемент управления для ввода текста, щелкнув на TextBox из панели инструментов. Далее, вы можете перетащить текстовое поле на UserForm.
-
Вы можете изменить имена и подписи элементов управления. Имена используются в коде Excel VBA. Титры являются те, которые появляются на экране. Это хорошая практика, чтобы изменить имена элементов управления, но не надо здесь, потому что у нас есть только несколько элементов управления в этом примере. Для того, чтобы изменить заголовок этикетки, текстовые поля и командные кнопки, выберите View, Properties Window и нажмите на каждого элемента управления.
-
Для того, чтобы показать UserForm, поместить командную кнопку на листе и добавьте следующие строки кода:
Private Sub CommandButton1_Click() UserForm1.Show End Sub
Сейчас мы собираемся создать Sub UserForm_Initialize. При использовании метода Show для UserForm, этот подпункт будет автоматически выполняться.
-
Откройте редактор Visual Basic.
-
В окне Project Explorer, щелкните правой кнопкой мыши на UserForm1, а затем нажмите кнопку Просмотр кода.
-
Выберите UserForm из списка левого выпадающего списка. Выберите Initialize справа в раскрывающемся списке.
-
Добавьте следующую строку кода:
Private Sub UserForm_Initialize() TextBox1.SetFocus End Sub
Объяснение: это строка кода устанавливает фокус на первом текстовом поле, как это, когда мы хотим начать, когда UserForm загружается.
Теперь мы создали первую часть UserForm. Хотя это выглядит аккуратным уже, ничего не произойдет еще, когда мы вводим значение в текстовом поле ID или когда мы нажимаем на одну из кнопок команд.
-
В окне Project Explorer, щелкните правой кнопкой мыши на UserForm1, а затем нажмите кнопку Просмотр кода.
-
Выберите textBox1 с левого выпадающего списка. Выберите Изменить справа в раскрывающемся списке.
-
Добавьте следующую строку кода:
Private Sub TextBox1_Change() GetData End Sub
-
В окне проекта дважды щелкните на UserForm1.
-
Дважды щелкните на Edit / Add кнопки управления.
-
Добавьте следующую строку кода:
Private Sub CommandButton1_Click() EditAdd End Sub
-
Дважды щелкните по командной кнопке Clear.
-
Добавьте следующую строку кода:
Private Sub CommandButton2_Click() ClearForm End Sub
Объяснение: эти подводные лодки называют другие подводные лодки мы собираемся создать в секунду.
-
Дважды щелкните на кнопке Закрыть команду.
-
Добавьте следующую строку кода:
Private Sub CommandButton3_Click() Unload Me End Sub
Объяснение: это строка кода закрывает UserForm.
Время создания сабы. Вы можете пройти через нашу функцию и к югу от главы более узнать о подлодке. Если вы находитесь в спешке, просто поместите следующие подлодки в модуль (в редакторе Visual Basic, выберите Вставка, модуль).
-
Во-первых, объявить три переменные типа Integer и одну переменную типа Boolean. Объявите переменные в разделе Общие объявления (в верхней части модуля). Таким образом, вы только должны объявить переменные один раз, и вы можете использовать их в нескольких сабвуферов.
Dim id As Integer, i As Integer, j As Integer, flag As Boolean
-
Добавьте к югу GetData.
Sub GetData() If IsNumeric(UserForm1.TextBox1.Value) Then flag = False i = 0 id = UserForm1.TextBox1.Value Do While Cells(i + 1, 1).Value <> "" If Cells(i + 1, 1).Value = id Then flag = True For j = 2 To 3 UserForm1.Controls("TextBox" & j).Value = Cells(i + 1, j).Value Next j End If i = i + 1 Loop If flag = False Then For j = 2 To 3 UserForm1.Controls("TextBox" & j).Value = "" Next j End If Else ClearForm End If End Sub
Объяснение: Если ID текстовое поле содержит числовое значение, Excel VBA ищет ID и загружает соответствующие записи. Мы используем ссылки: / VBA-примеры-Controls-коллекцию [Controls Collection]
легко перебрать текстовые поля. Если Excel VBA не может найти идентификатор (флаг еще False), он опустошает второе и третье текстовое поле. Если ID текстовое поле не содержит числовое значение, Excel VBA вызывает ClearForm суб.
-
Добавьте ClearForm к югу.
Sub ClearForm() For j = 1 To 3 UserForm1.Controls("TextBox" & j).Value = "" Next j End Sub
Объяснение: Excel VBA удаляет все текстовые поля.
-
Добавьте к югу EditAdd.
Sub EditAdd() Dim emptyRow As Long If UserForm1.TextBox1.Value <> "" Then flag = False i = 0 id = UserForm1.TextBox1.Value emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1 Do While Cells(i + 1, 1).Value <> "" If Cells(i + 1, 1).Value = id Then flag = True For j = 2 To 3 Cells(i + 1, j).Value = UserForm1.Controls("TextBox" & j).Value Next j End If i = i + 1 Loop If flag = False Then For j = 1 To 3 Cells(emptyRow, j).Value = UserForm1.Controls("TextBox" & j).Value Next j End If End If End Sub
Объяснение: Если ID текстовое поле не является пустым, Excel VBA редактирует запись на листе (в противоположность загрузке записи, как мы уже видели ранее).
Если Excel VBA не может найти идентификатор (флаг еще False), он добавляет запись к следующей пустой строке. Переменная emptyRow является первой пустой строкой и увеличивает каждый раз, когда добавляется запись.
-
Выход из редактора Visual Basic, введите метки, показанные ниже в строке 1 и проверить UserForm.