Ниже мы рассмотрим программу в Excel VBA, которая создает интерактивную UserForm. UserForm мы собираемся создать выглядит следующим образом:

Excel VBA Interactive Userform

Объяснение: всякий раз, когда вы вводите значение в текстовом поле ID, Excel VBA загружает соответствующую запись. При нажатии на кнопку Edit / Add, Excel VBA редактирует запись на листе или добавляет запись, когда идентификатор еще не существует. Кнопка Clear очищает все текстовые поля. Кнопка Закрыть закрывает UserForm.

Для создания этого UserForm, выполните следующие действия.

  1. Откройте редактор Visual Basic. Если проводник проекта не отображается, нажмите кнопку Просмотр, Project Explorer.

  2. Нажмите кнопку Вставить, UserForm. Если панель инструментов не появляется автоматически, нажмите кнопку View, Toolbox. Экран должен быть установлен, как показано ниже.

Userform Screen Setup in Excel VBA

  1. Добавьте метки, текстовые поля (первый в верхней части, второй ниже первого, и так далее) и кнопка управления. После того, как это было закончено, результат должен быть согласован с изображением UserForm, показанным ранее. Например, создать элемент управления для ввода текста, щелкнув на TextBox из панели инструментов. Далее, вы можете перетащить текстовое поле на UserForm.

  2. Вы можете изменить имена и подписи элементов управления. Имена используются в коде Excel VBA. Титры являются те, которые появляются на экране. Это хорошая практика, чтобы изменить имена элементов управления, но не надо здесь, потому что у нас есть только несколько элементов управления в этом примере. Для того, чтобы изменить заголовок этикетки, текстовые поля и командные кнопки, выберите View, Properties Window и нажмите на каждого элемента управления.

  3. Для того, чтобы показать UserForm, поместить командную кнопку на листе и добавьте следующие строки кода:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Сейчас мы собираемся создать Sub UserForm_Initialize. При использовании метода Show для UserForm, этот подпункт будет автоматически выполняться.

  1. Откройте редактор Visual Basic.

  2. В окне Project Explorer, щелкните правой кнопкой мыши на UserForm1, а затем нажмите кнопку Просмотр кода.

  3. Выберите UserForm из списка левого выпадающего списка. Выберите Initialize справа в раскрывающемся списке.

  4. Добавьте следующую строку кода:

Private Sub UserForm_Initialize()

TextBox1.SetFocus

End Sub

Объяснение: это строка кода устанавливает фокус на первом текстовом поле, как это, когда мы хотим начать, когда UserForm загружается.

Теперь мы создали первую часть UserForm. Хотя это выглядит аккуратным уже, ничего не произойдет еще, когда мы вводим значение в текстовом поле ID или когда мы нажимаем на одну из кнопок команд.

  1. В окне Project Explorer, щелкните правой кнопкой мыши на UserForm1, а затем нажмите кнопку Просмотр кода.

  2. Выберите textBox1 с левого выпадающего списка. Выберите Изменить справа в раскрывающемся списке.

  3. Добавьте следующую строку кода:

Private Sub TextBox1_Change()

GetData

End Sub
  1. В окне проекта дважды щелкните на UserForm1.

  2. Дважды щелкните на Edit / Add кнопки управления.

  3. Добавьте следующую строку кода:

Private Sub CommandButton1_Click()

EditAdd

End Sub
  1. Дважды щелкните по командной кнопке Clear.

  2. Добавьте следующую строку кода:

Private Sub CommandButton2_Click()

ClearForm

End Sub

Объяснение: эти подводные лодки называют другие подводные лодки мы собираемся создать в секунду.

  1. Дважды щелкните на кнопке Закрыть команду.

  2. Добавьте следующую строку кода:

Private Sub CommandButton3_Click()

Unload Me

End Sub

Объяснение: это строка кода закрывает UserForm.

Время создания сабы. Вы можете пройти через нашу функцию и к югу от главы более узнать о подлодке. Если вы находитесь в спешке, просто поместите следующие подлодки в модуль (в редакторе Visual Basic, выберите Вставка, модуль).

  1. Во-первых, объявить три переменные типа Integer и одну переменную типа Boolean. Объявите переменные в разделе Общие объявления (в верхней части модуля). Таким образом, вы только должны объявить переменные один раз, и вы можете использовать их в нескольких сабвуферов.

Dim id As Integer, i As Integer, j As Integer, flag As Boolean
  1. Добавьте к югу 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 суб.

  1. Добавьте ClearForm к югу.

Sub ClearForm()

For j = 1 To 3

UserForm1.Controls("TextBox" & j).Value = ""

Next j

End Sub

Объяснение: Excel VBA удаляет все текстовые поля.

  1. Добавьте к югу 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 является первой пустой строкой и увеличивает каждый раз, когда добавляется запись.

  1. Выход из редактора Visual Basic, введите метки, показанные ниже в строке 1 и проверить UserForm.

Excel VBA Interactive Userform