/ / Excel VBA інтерактивна форма користувача

Excel VBA інтерактивна форма користувача

Нижче ми розглянемо програму в Росії Excel VBA що створює Інтерактивна форма Userform. Формат Userform, який ми збираємося створити, виглядає наступним чином:

Excel VBA інтерактивна форма користувача

Пояснення: коли ви вводите значення в текстове поле ID, Excel VBA завантажує відповідний запис. Коли ви натискаєте кнопку Редагувати / Додати, Excel VBA змінює запис на аркуші або додає запис, коли ідентифікатор ще не існує. Кнопка «Очистити» очищає всі текстові поля. Кнопка "Закрити" закриває Userform.

Щоб створити цю Userform, виконайте наступні кроки.

1. Відкрийте редактор Visual Basic. Якщо Провідник проекту не відображається, натисніть Переглянути, Провідник проекту.

2. Клацніть Insert, Userform. Якщо панель інструментів не відображається автоматично, натисніть Переглянути, Панель інструментів. Ваш екран повинен бути налаштований як показано нижче.

Налаштування екрана Userform у програмі Excel VBA

3. Додайте мітки, текстове поле (спочатку угорі, другий під першим і так далі) та командні кнопки. Після того, як це буде завершено, результат має відповідати картині формату Userform, показаному раніше. Наприклад, створіть елемент керування текстом, натиснувши TextBox на панелі інструментів. Далі можна перетягнути текстове поле на Userform.

4 Ви можете змінювати імена та підписи елементів керування. Імена використовуються в коді Excel VBA. Підписи - це ті, які з'являються на вашому екрані. Рекомендовано змінити назви елементів керування, але тут немає необхідності, оскільки в цьому прикладі ми маємо лише декілька елементів керування. Щоб змінити заголовок ярликів, текстових полів та командних кнопок, натисніть кнопку «Перегляд», «Властивості» та клацніть по кожному елементу керування.

5. Щоб показати Userform, помістіть на вашій робочій клавіші команду та додайте наступну кодову рядок:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Ми збираємось створити Sub UserForm_Initialize. Якщо ви використовуєте метод Show для форми Userform, цей підрозділ буде автоматично виконано.

6. Відкрийте редактор Visual Basic.

7. У Провіднику проекту клацніть правою кнопкою миші на UserForm1 і натисніть кнопку Перегляд коду.

8. Оберіть Userform з розкривного списку ліворуч. У спадному списку праворуч виберіть «Ініціалізувати».

9. Додайте наступну кодову лінію:

Private Sub UserForm_Initialize()

TextBox1.SetFocus

End Sub

Пояснення: ця кодова лінія встановлює фокус на перше текстове поле, оскільки саме там ми хочемо почати, коли завантажується Userform.

Тепер ми створили першу частину Userform. Хоча це виглядає вже акуратно, нічого не станеться, коли ми введемо значення в текстове поле ID або коли ми натискаємо одну з командних кнопок.

10. У Провіднику проекту клацніть правою кнопкою миші на UserForm1 і натисніть кнопку Перегляд коду.

11. Оберіть пункт TextBox1 у спадному списку ліворуч. У спадному списку праворуч виберіть «Змінити».

12. Додайте наступну кодову лінію:

Private Sub TextBox1_Change()

GetData

End Sub

13. У Провіднику проекту двічі клацніть на UserForm1.

14. Двічі клацніть на кнопці Змінити / Додати.

15. Додайте наступну кодову лінію:

Private Sub CommandButton1_Click()

EditAdd

End Sub

16. Двічі клацніть на кнопці Очистити команду.

17. Додати наступну кодову лінію:

Private Sub CommandButton2_Click()

ClearForm

End Sub

Пояснення: ці підрядні виклики інші субсидії ми збираємося створити за секунду.

18. Двічі клацніть на кнопці Закрити.

19. Додайте наступну кодову лінію:

Private Sub CommandButton3_Click()

Unload Me

End Sub

Пояснення: ця кодова лінія закриває Userform.

Час створення підстанції. Ви можете прочитати розділ "Функція" та "Підрозділ", щоб дізнатись більше про підпис. Якщо ви поспішаєте, просто помістіть наступний підпис у модуль (у редакторі Visual Basic натисніть кнопку Вставити, модуль).

20 По-перше, оголошуйте три змінні типу Integer і одну змінну типу Boolean. Оголосіть змінні в розділі "Загальні декларації" (у верхній частині модуля). Таким чином, вам потрібно лише оголосити змінні один раз, і ви можете використовувати їх у кількох субсистемах.

Dim id As Integer, i As Integer, j As Integer, flag As Boolean

21. Додайте підменю 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 шукає ідентифікатор та завантажує відповідний запис. Ми використовуємо Колекцію елементів керування, щоб легко прокручувати текстові поля. Якщо Excel VBA не може знайти ідентифікатор (прапор залишається False), воно вбирає друге та третє текстове поле. Якщо текстовий рядок ID не містить числове значення, Excel VBA викликає підрозділ ClearForm.

22. Додайте підрозділ ClearForm.

Sub ClearForm()

For j = 1 To 3
    UserForm1.Controls("TextBox" & j).Value = ""
Next j

End Sub

Пояснення: Excel VBA очищає всі текстові поля.

23. Додати підменю 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 - це перший порожній рядок і збільшується щоразу, коли додається запис.

24. Вийдіть з редактора Visual Basic, введіть мітки, показані нижче, у рядку 1 та перевірте формат Userform.

Excel VBA інтерактивна форма користувача

Також читайте: