В цьому прикладі спробуємо створити невелике вікно діалогу з макросом, за допомогою якого будемо вводити дані у комірки робочого листа ЕТ Calc. Практична цінність такого інструменту невелика, але в якості вправи для вивчення програмування макросів, його використано у переважній більшості підручників з VBA. Щоб не заплутати початківця зайвим різноманіттям елементів керування, зведемо завдання до вводу даних лише у два стовпці таблиці: текстові дані з прізвищами учасників якого-небудь тестування і число — результат тестування у балах, а додатково “навчимо” макрос автоматично нумерувати записи в таблиці.
Створюємо діалог наступного вигляду
Лічильник для числового поля слід увімкнути у вікні властивостей.
Для його запуску, традиційно, використовуємо такий код (див. тут):
Dim MyDlg As Object
Sub RunDialog
MyDlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
MyDlg.execute()
End Sub
- Діалог і модуль з макросами в нашому проикладі розміщені в окремій робочій книзі, тому звертання до комірок її першого робочого листа здійснюємо з префіксом ThisComponent.Sheets(0) (деталі).
- Макрос, що читатиме дані з полів діалога повинен визначити черговий рядок таблиці для запису даних. Для цього в циклі перевіряємо вміст комірок стовпця “A”, підраховуючи кількість зайнятих комірок за допомогою властивості EMPTY інтерфейсу com.sun.star.table.CellContentType.
- Дані з числового поля зчитуємо за допомогою його властивості Value, з текстового — за допомогою властивості Text.
Код макроса, що читає дані з діалога і записує їх в таблицю може бути таким:
Sub InsertData
n = 1
UCell = ThisComponent.Sheets(0). _
getCellRangeByName(“A” & CStr(n))
While Not(UCell.getType() = _
com.sun.star.table.CellContentType.EMPTY)
n = n + 1
UCell = ThisComponent.Sheets(0). _
getCellRangeByName(“A” & CStr(n))
Wend
ThisComponent.Sheets(0).getCellRangeByName(“A” & CStr(n)). _
Value = n – 1
ThisComponent.Sheets(0).getCellRangeByName(“B” & CStr(n)). _
String = MyDlg.GetControl(“TextField1”).Text
ThisComponent.Sheets(0).getCellRangeByName(“C” & CStr(n)). _
Value = CSng(MyDlg.GetControl(“NumericField1”).Value)
End Sub
Його виконання слід призначити на подію “Виконати дію” (Execute action) кнопки “Записати“ на діалозі.
Використовуючи інші елементи керування, можна вдосконалити створений діалог і отримати форму для вводу даних на робочий лист для таблиць будь-якої структури.
Залишити відповідь
Щоб відправити коментар вам необхідно авторизуватись.