Ссылка на глобальную переменную — MS Access
Я пытаюсь передать имя глобальной переменной подпрограмме и хотел бы знать, как на нее ссылаться. Например, с помощью элемента управления я мог бы сделать следующее:
Кажется, я определенно мог лаять здесь не на то дерево, поэтому я объясню, чего я пытаюсь достичь.
У меня есть форма, в которой есть текстовые поля для адресов пользователей (рисков), с флажком вверху, который позволяет пользователю выбрать, что этот адрес совпадает с данными «контакта», уже имеющимися в системе, и текстовые поля заблокированы.
Заполнение текстовых полей нормально и работает. Я использую глобальные переменные для улучшения удобства использования (хотя и немного). Пользователь может добавлять новые сведения, и если они установят флажок «сделать то же, что и контакт», введенные им данные сохранятся в глобальных переменных, по одной для каждого элемента управления.
Если пользователь совершил ошибку, установив флажок, он не потерял это значение, и при снятии флажка возвращаются введенные значения. Я надеялся создать подпрограмму, в которой я мог бы передавать имя глобальной переменной и элемента управления и вызывать эту процедуру, а не записывать ее для каждого элемента управления.
У меня такое чувство, что я мог использовать неправильную технику для достижения своих целей. Но в ответ на мой первоначальный вопрос, похоже, вы не можете передавать глобальные переменные подпрограммам так, как я хотел.
- Мне кажется, что вы могли бы рассмотреть возможность использования структуры памяти на уровне формы, такой как набор записей snapshop, в котором хранятся исходные значения рассматриваемых полей. Это тот случай, когда Globals явно не подходят. Будет ли какая-либо структура данных, которую вы в конечном итоге используете, быть общедоступной, необходимо определить. Если он вам нужен в подчиненной форме и он будет определен в родительской форме, то, если вы используете его из подчиненной формы, он должен быть общедоступным. Но это сильно отличается от GLOBAL.
Если вы спрашиваете, можете ли вы динамически ссылаться на глобальные переменные, используя строку, содержащую имя переменной, ответ будет отрицательным. Вы можете использовать один глобальный массив и передать индекс, что позволит вам динамически ссылаться на элемент массива.
[Редактировать]
В ответ на пояснение в вопросе: вы можете просто сохранить значение каждого элемента управления в его Tag свойство, когда пользователь устанавливает флажок. Затем, если пользователь снимает флажок, вы можете просто перебрать элементы управления и присвоить значение из Tag назад к Value контроля.
- Да, Бен, это было то, что я надеялся сделать, похоже, я не могу, к сожалению, приветствовать совет относительно массивов.
- Eval не принимает имена пользовательских переменных в VBA, только пользовательские функции AFAIK.
- @BenV: извиняюсь, плохой этикет stackoverflow от моего имени!
- @glinch: Нет проблем. Я обновил свой ответ, указав возможное решение в ответ на разъяснение в вопросе.
- Отличный совет, БенВ, пойду с Рему и использую defaultValue, поскольку я использую тег для чего-то еще. Ура все равно, никогда не думал об использовании этих свойств таким образом.
Вам не нужно передавать глобальные переменные, вы можете просто ссылаться на них по имени. Обратите внимание, что глобальные переменные сбрасываются при возникновении необработанной ошибки.
На http://msdn.microsoft.com/en-us/library/dd897495(office.12).aspx вы найдете раздел, посвященный области действия и времени жизни переменных и констант.
Вы можете сохранить значения из ваших элементов управления в объекте Dictionary, используя имена элементов управления в качестве ключей словаря. Затем вы можете получить значение для каждого элемента управления на основе имени элемента управления.
- Есть ли причина использовать словарь объектов сценариев вместо настраиваемой коллекции VBA или массива?
- Я выбрал словарь вместо коллекции, потому что словари имеют метод .keys (), который на самом деле здесь не нужен. Я не рассматривал использование массива. Кроме того, я все еще склонен думать в первую очередь о словарях из-за Python.
- @HansUp приветствует другую технику, о которой я вообще не знал, большое спасибо.
- Я использую коллекции для списков в одну колонку. Они очень просты в использовании и невероятно быстры. Массивы, которые я использую, только когда мне нужно более одного атрибута. Я никогда не использовал объект словаря, потому что он не предоставляется Access / VBA. Что делает метод .Keys ()?
- .keys() возвращает массив ключей словаря. Когда вы назначаете ключ элементу коллекции, я не знаю, как получить ключи. Мой подход заключался в использовании имени элемента управления в качестве ключа элемента и значения элемента управления в качестве значения элемента. Но, поскольку вы упомянули список из одной колонки, я думаю, что мы увидели это по-другому. Мне было бы интересно услышать больше из вашей точки зрения.
Я использую дополнительное поле в таблице — name cancel — конечно, логическое — когда я не уверен, что содержимое полей будет действительным, я устанавливаю его true. Если до конца это поле окажется истинным — то убираю (это может быть вся запись или, конечно, какие-то поля). Очень просто.
Основные понятия языка VBA. Переменные и константы
Существует оператор Erase , который полностью освобождает память из-под динамического массива. Будучи вызванным для статического массива он его обнуляет, а если он строковый, то элементам присваивается пустые строки.
Читайте также
Объявление переменных Перед использованием переменной в коде Web-сценария рекомендуется выполнить ее объявление. Для этого служит оператор объявления переменной var, после которого указывают имя переменной:var x;Теперь объявленной переменной можно присвоить какое-либо
Ввод запроса в строке поиска Пользоваться строкой поиска очень просто: откройте папку, в которой нужно найти файл, и наберите в строке поиска имя файла. Уже после ввода первых символов имени начнется фильтрация содержимого папки и в области просмотра отобразятся объекты,
Переменные и типы данных VBA
Для работы с объектами требуется устанавливать значение объектной переменной . В отличие от переменных других типов установка значения объектной переменной выполняется при помощи оператора Set.