Значения аргументов кода свойства RowSourceType (определяемая пользователем функция)
Созданная функция Visual Basic должна принимать пять аргументов. Первый аргумент должен быть объявлен как элемент управления, а остальные — как Variants. Сама функция должна возвращать значение Variant.
Functionname (fldAs Control, idAs Variant, rowAs Variant, colAs Variant, codeAs Variant) As Variant
Процедура Function содержит следующие пять обязательных аргументов.
Аргументация | Описание |
---|---|
Fld | Переменная элемента управления, ссылающаяся на заполняемый список или поле со списком. |
id | Уникальное значение, определяющее заполняемый элемент управления. Это полезно, если вы хотите использовать одну определяемую пользователем функцию для нескольких списков или полей со списком и должны различать их. (В примере для этой переменной задается значение функции Таймер .) |
Строки | Заполняемая строка (отсчитывается от нуля). |
Col | Заполняемый столбец (от нуля). |
code | Встроенная константа, указывающая тип запрашиваемой информации. |
Примечание.
Так как Microsoft Access несколько раз вызывает определяемую пользователем функцию для вставки элементов в список, часто необходимо сохранять информацию от вызова к вызову. Лучший способ сделать это — использовать статические переменные.
Microsoft Access вызывает определяемую пользователем функцию, многократно используя различные значения в аргументе кода для указания необходимых сведений. Аргумент кода может использовать следующие встроенные константы.
Константа | Смысл | Функция возвращает |
---|---|---|
acLBInitialize | Initialize | Ненулевое значение, если функция может заполнить список; Значение false (0) или значение NULL в противном случае. |
acLBOpen | Открыть | Ненулевое значение идентификатора, если функция может заполнить список; В противном случае значение false или null . |
acLBGetRowCount | Количество строк | Количество строк в списке (может быть равно нулю); -1, если неизвестно. |
acLBGetColumnCount | Число столбцов | Количество столбцов в списке (не может быть равным нулю); должно соответствовать значению листа свойств. |
acLBGetColumnWidth | Ширина столбца | Ширина (в твипах) столбца, заданного аргументом col ; -1, чтобы использовать ширину по умолчанию. |
acLBGetValue | Запись в списке | Запись списка, отображаемая в строке и столбце, заданных аргументами row и col . |
acLBGetFormat | Строка форматирования | Форматировать строку, используемую для форматирования записи списка, отображаемой в строке и столбце, указанных аргументами row и col ; -1 для использования формата по умолчанию. |
acLBEnd | End (последний вызов определяемой пользователем функции всегда использует это значение) | Ничего. |
acLBClose | (Не используется) | Не используется. |
Access вызывает определяемую пользователем функцию один раз для acLBInitialize, acLBOpen, acLBGetRowCount и acLBGetColumnCount. Он инициализирует определяемую пользователем функцию, открывает запрос и определяет количество строк и столбцов.
Access дважды вызывает определяемую пользователем функцию для acLBGetColumnWidth: один раз для определения общей ширины списка или поля со списком, а второй раз — для задания ширины столбца.
Количество вызовов определяемой пользователем функции для acLBGetValue и acLBGetFormat для получения записей списка и форматирования строк зависит от количества записей, прокрутки пользователя и других факторов.
Access вызывает определяемую пользователем функцию для acLBEnd при закрытии формы или при каждом запросе списка или поля со списком.
Каждый раз, когда требуется определенное значение (например, количество столбцов), возврат значения NULL или любого недопустимого значения приводит к тому, что Access перестает вызывать определяемую пользователем функцию с этим кодом.
Совет
Используйте структуру кода Select Case из примера в качестве шаблона для пользовательских функций, определяемых пользователем свойств RowSourceType .
Пример
Следующая определяемая пользователем функция возвращает список следующих четырех понедельников после сегодняшней даты. Чтобы вызвать эту функцию из элемента управления list box, введите ListMondays в качестве параметра свойства RowSourceType и оставьте параметр свойства RowSource пустым.
Public Function ListMondays(fld As Control, id As Variant, _
row As Variant, col As Variant, code As Variant) _
As Variant
Dim Offset As Integer
Dim WeekdayDate As Date
Select Case code
Case acLBInitialize ' Initialize.
ListMondays = True
Case acLBOpen ' Open.
ListMondays = Timer ' Unique ID.
Case acLBGetRowCount ' Get rows.
ListMondays = 4
Case acLBGetColumnCount ' Get columns.
ListMondays = 1
Case acLBGetColumnWidth ' Get column width.
ListMondays = -1 ' Use default width.
Case acLBGetValue ' Get the data.
Offset = Abs((9 - Weekday(Date)) Mod 7)
WeekdayDate = DateAdd("d", _
Offset + 7 * row, Date)
ListMondays = Format(WeekdayDate, _
"mmmm d")
End Select
End Function
В следующем примере статический массив используется для хранения имен баз данных в текущем каталоге. Чтобы вызвать эту функцию, введите ListMDB в качестве параметра свойства RowSourceType и оставьте параметр свойства RowSource пустым.
Public Function ListMDBs(fld As Control, id As Variant, _
row As Variant, col As Variant, code As Variant) _
As Variant
Static dbs(127) As String
Static Entries As Integer
Dim ReturnVal As Variant
ReturnVal = Null
Select Case code
Case acLBInitialize ' Initialize.
Entries = 0
dbs(Entries ) = Dir("*.MDB")
Do Until dbs(Entries) = "" Or Entries >= 127
Entries = Entries + 1
dbs(Entries) = Dir
Loop
ReturnVal = Entries
Case acLBOpen ' Open.
' Generate unique ID for control.
ReturnVal = Timer
Case acLBGetRowCount ' Get number of rows.
ReturnVal = Entries
Case acLBGetColumnCount ' Get number of columns.
ReturnVal = 1
Case acLBGetColumnWidth ' Column width.
' -1 forces use of default width.
ReturnVal = -1
Case acLBGetValue ' Get data.
ReturnVal = dbs(row)
Case acLBEnd ' End.
Erase dbs
End Select
ListMDBs = ReturnVal
End Function
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по