Существует достаточно быстрый, но неоправданно грязный способ добавления Eventhandlers нескольких элементов управления ...
я) определяют функцию, которую вы хотите позвонить с Change
. Afaik это должен быть Public Function
в нормальном модуле
ii) создать Access-makro (не VBA) с RunCode
-Event, который вызывает вашу функцию.
III) добавить событие элементов управления, либо с вашей точки зрения дизайна или что-то вроде
Private Sub Form_Current()
Dim ctl
For Each ctl In Me.Controls
With ctl
If .ControlType = acTextBox Then
.OnChange = "Makro1"
End If
End With
Next ctl
End Sub
Примечание:
приведенный выше код добавляет событие во все текстовые поля (из-за меня ленивый). замените If .ControlType = acTextBox Then
на проверку по своему вкусу. Вы можете использовать тег, смарт-тег, простые условности имени как tbx_c1r1
или массивы элементов управления, если вы фантазия
это становится значительно сложнее, если ваша функция включает Caller
в некотором роде. Обязательно опубликуйте свою функцию, возможно, мы сможем что-то выяснить.
Надеюсь, это поможет! Буду рад, если кто-нибудь придумает более разумный подход.
Будет ли функция, вызываемая воздействовать на определенный элемент управления (например, тот, который вы изменили, или те, что в той же строке), или это что-то глобальное (например, печать времени в одном конкретном текстовом поле)? –
Это повлияет на конкретные элементы управления, но не те, которые вызывают функции. Например, это может повлиять на сводное текстовое поле, отображающее сумму всех значений в первом столбце (если все входы, где числовые). – Noceo
kk. В конкретном случае 'SUM'-Field вы могли бы подумать о добавлении' .ControlSource' с '[Text0] + [Text1] + ....' to ** в одно конкретное поле суммы ** (вручную или с петлей над вашими элементами управления). Тогда вам не нужно возиться с событиями ваших входных полей. Для более сложной функции, требующей VBA, см. Мой пост ниже. –