Могу ли я использовать переменную в качестве имени элемента управления в Microsoft Access VBA - PullRequest
4 голосов
/ 25 ноября 2011

У меня есть всплывающая форма Microsoft Access, которую я использую для поиска адресов. Как только пользователь нашел почтовый индекс, адрес помещается в различные текстовые поля формы, из которой он был запущен. Проблема в том, что эта всплывающая форма запускается из разных форм в базе данных, поэтому текстовые поля, в которые она помещает результат, находятся в разных местах.

Я попытался обойти это следующим образом. У меня есть распределительный щит, который всегда открыт, поэтому у меня есть скрытое текстовое поле, в котором я программно помещаю имя формы, из которой запускаю всплывающую форму. Затем я объявляю строковую переменную, для которой установлено текущее значение этого скрытого текстового поля, например:

Dim currentForm As String
currentForm = [Forms]![foo]![bar]

Затем я попытался поместить информацию об адресе в соответствующие текстовые поля следующим образом:

Forms!currentForm![txtCurrentAdd1] = rst![Line1]

Однако это не работает, как запланировано, что я делаю не так?

Спасибо

Ответы [ 5 ]

5 голосов
/ 25 ноября 2011

Вы можете получить доступ к элементам управления в других формах, как это:

Dim FormName As String
Dim ControlName As String

FormName = "YourForm"
ControlName = "YourTextbox"

Forms(FormName).Controls(ControlName) = "New Value"
5 голосов
/ 25 ноября 2011

Либо:

Dim currentForm As String
''Not sure where the two parts are coming from
''but you cannot have them like that
currentForm = "foobar"

Forms(currentForm).[txtCurrentAdd1] = rst![Line1]

Или

Dim currentForm As Form
Set currentForm = Forms![foobar]

currentForm![txtCurrentAdd1] = rst![Line1]

Возможно, вы захотите прочитать о взрывах против точки.

Имейте в виду, все выглядит немногокак будто ты плывешь вверх по течению.

1 голос
/ 19 октября 2018

Я думаю

Me.Controls(variablelabelName).Caption

Вы можете написать код для изменения переменной и использовать в качестве имени label уникальную подпись для каждой метки.

1 голос
/ 30 июня 2014

Я знаю, что это старый пост, но он может быть полезен для новых читателей. Простой способ обойти проблему передачи переменных между модулями и формами - использовать область реестра VBA. Это очень простая и простая в использовании техника, которая делает проекты красивыми и чистыми.

Чтобы сохранить значение:

SaveSetting AppName, Section, Key, Setting

Чтобы получить значение:

GetSetting AppName, Section, Key, [Default]

Это позволяет избежать потери переменных и создания скрытых элементов управления в формах. Он также работает без изменений на ПК и Mac.

Затем я обычно устанавливаю загрузку констант в своих проектах, чтобы определить первые три параметра:

Public Const REG_PROD = "My product name"
Public Const REG_CONFIG = "Configuration"
Public Const REG_SETTING1 = "My Setting 1"

Таким образом, вышеупомянутые вызовы станут:

Чтобы сохранить значение:

SaveSetting REG_PROD, REG_CONFIG, REG_SETTING1, "My Value"

Чтобы получить значение:

GetSetting REG_PROD, REG_CONFIG, REG_SETTING1, "Value not set"

Раньше я использовал скрытый метод управления, но он добавляет много управления, и вы не всегда можете иметь значения переменных, тогда как вы можете оставить экземпляр RegEdit открытым для целей отладки.

1 голос
/ 25 ноября 2011

Вы также можете использовать свойство OpenArgs.Чтобы открыть свое многоразовое всплывающее окно, используйте:

DoCmd.OpenForm FormName:="frmPopup", OpenArgs:=Me.Name

для передачи имени вызывающего абонента.

В frmPopup вы можете обратиться к Me.OpenArgs, чтобы получить эту информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...