Тема: Заполнение элементов управления и элементов ActivateX
Довольно часто при создании какого-либо бланка, формы или шаблона документа Word мы используем элементы управления и элементы ActivateX, содержащие списки выбора.
Заполнять эти элементы вручную бывает довольно сложно и муторно. Этот процесс можно упростить если данные списка содержатся в какой-нибудь таблице данных, будь-то Word, Excel, Access и т.д., которые можно импортировать в Word.
Элементы управления использульзуются в форматах Word 2007 и выше. Т.е. файл должен иметь расширяния: «.docx», «.docm», «.dotx», «.docx».
Элементы управления содержащие списки выбора:
ContentControlComboBox (Поле со списком) — позволяет пользователю как выбирать значения из списка, так и самому заполнять это поле.
ContentControlDropdownList (Список) — ограничивает выбор пользоватяля только списком
Элементы управления ActivateX содержащие списки выбора:
ComboBox (Поле со списком) — позволяет пользователю как выбирать значения из списка, так и самому заполнять это поле.
ListBox (Список) — ограничивает выбор пользоватяля только списком
см. вложение
Несмотря на то, что общее назначение этих элементов одинаково, они различаются свойствами, способами заполнения списков и событиями происходящими при использовании этих элементов.
Но общую информаци эти элементы должны получать из таблицы данных Word. Для получения данных из таблицы мы будем использовать 2 функции: TableArray и CellValue.
TableArray — функция возвращающая массив данных таблицы в зависимости от выбора столбца таблицы.
CellValue — функция возвращающая значение ячейки, либо Строку, либо Число.
Вот код этих функций.
Public Function CellValue(Cell As Cell) As Variant ' Функция возвращает значение ячейки таблицы String или Double, где Cell ячейка таблицы
CellValue = Cell.Range.Text ' Оригинальный текст ячейки таблицы
CellValue = Trim(Mid(CellValue, 1, Len(CellValue) - 2)) ' Текст ячейкики таблицы без знаков закрытия последнего абзаца, знака закрытия ячейки и начальных и концевых пробелов, тип String
If IsNumeric(CellValue) = True Then ' Если значение является числом,
CellValue = CDbl(CellValue) ' возвращаем CellValue как значение типа Double
End If
End Function
Public Function TableArray(ByVal myTable As Table, ByVal NumColum As Variant) As Variant ' Функция возвращает массив таблицы, где myTable — таблица Word, NumColum — номер столбца таблицы
' Если NumColum = 0 и количество столбцов > 1, то функция возвратит двухмерный массив на основе количества строк и столбцов таблицы
' Если NumColum >= 1, то функция возвратит одномерный массив на основе количества строк и номера столбца таблицы определенного переменной NumColum
Dim lst() As Variant
Dim r As Long, c As Byte ' Переменная r — номер строки ячейки, с — номер столбца ячейки
If NumColum = 0 And myTable.Columns.Count > 1 Then
ReDim Preserve lst(1 To myTable.Rows.Count, 1 To myTable.Columns.Count)
For r = 1 To myTable.Rows.Count
For c = 1 To myTable.Columns.Count
lst(r, c) = CellValue(myTable.Cell(r, c))
Next c
Next r
Else
ReDim Preserve lst(1 To myTable.Rows.Count)
For r = 1 To myTable.Rows.Count
lst(r) = CellValue(myTable.Cell(r, NumColum))
Next r
End If
TableArray = lst
End Function