Использование глобальной коллекции в модуле формы - PullRequest
1 голос
/ 18 июня 2020

Чтобы реализовать функцию отмены изменений в форме, я стараюсь использовать «глобальную» коллекцию. Таким образом, у меня есть вверху модуля формы:

Option Compare Database
Public ChgeStack As collection

и

Private Sub Form_Open(Cancel As Integer)
Set ChgeStack = New collection
End Sub

Однако в любой момент, когда форма неактивна, проверка в непосредственном окне (?ChgeStack.count ) выдает ошибку (требуется объект), указывающую, что коллекция больше не выделяется. (разрыв в конце form_open дает правильный счетчик, равный нулю, поэтому он был выделен)
В чем проблема?

Ответы [ 3 ]

2 голосов
/ 19 июня 2020

"... проверка в непосредственном окне (?ChgeStack.count) дает ошибку (требуется объект), указывающую, что коллекция больше не выделяется."

Нет, в окне «Немедленное» ChgeStack находится вне контекста вашей формы. В этой ситуации ChgeStack является пустой переменной, а не объектом коллекции в вашей форме, и не имеет метода .Count.

Если вы хотите проверить количество коллекций из окна Immediate, дайте Access знать, что вы хотите ChgeStack, который является членом вашей формы:

? Forms("YourFormNameHere").ChgeStack.Count

Или вы можете добавить разрыв укажите в коде вашей формы, активируйте его и, находясь в режиме Break, попробуйте свой оригинальный подход (? ChgeStack.count) в окне Immediate. В этом контексте ChgeStack будет оцениваться как член формы.

0 голосов
/ 10 августа 2020
• 1000 знает его использование.
Public colChgeStack_YourFormNameHere As New Collection
0 голосов
/ 20 июня 2020

Спасибо. Я пробовал все это с тем же результатом: коллекция существует при проверке в некоторой точке останова в коде, но больше не после того, как какой-либо код завершил работу (похоже, она не выживает). Однако, когда я помещаю декларативную коллекцию в прямой модуль (вместо модуля формы) как глобальный , все работает так, как я ожидал. Итак, проблема решена. (кстати, VBA не принимает глобальные переменные в модуле формы… - возможно, потому, что это на самом деле класс?)

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