2013-05-08 2 views
0

У меня есть глобальная переменная, называемая флагом. Я могу получить доступ к флагам из каждого модуля в моем коде, но когда я назначу ему значение 1 в Sub Command97_Click(), по какой-то причине флаг не сохраняет значение Sub Form_BeforeUpdate (Cancel As Integer). Когда я печатаю флаг в Sub Form_BeforeUpdate, он больше не равен 1. Я знаю, что это глупо, но я новичок в vba ...Значение глобальной переменной VBA исчезает в другом подкатегории

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

Заранее благодарен!

Public flag As Integer 

Private Sub Command97_Click() 
    flag = 1 
End Sub 

Private Sub Form_BeforeUpdate(Cancel As Integer) 
    If flag = 1 Then 
     DoCmd.RunCommand acCmdUndo 
     MsgBox "Flag = " & flag, vbInformation 
     Exit Sub 
    End If 
End Sub 
+0

Поместите эту строку после того, как вы установили 'flag = 1' и пропустите ее, используя отладчик/F8:' Form_BeforeUpdate (False) '. Это приведет вас к другому подразделению, а значение для 'flag' должно быть 1. Сообщите мне, что произойдет. –

ответ

2

Я подозреваю, что у вас есть проблема с переменной областью. Это зависит от того, где определена переменная вашего флага, и есть ли другие с тем же именем в другом месте.
Если вы скажете Public flag as Integer в верхней части модуля формы, то это действительно не глобально.

Take a look here for an explanation of scopes.

0

Поиск «общественного флага» и «глобальный флаг» во всех ваших модулей, может быть, у вас есть имя этой переменной в два раза.
Можно различать два одинаково названных переменных в различных стандартных-модулей, если вы установите имя-модуля перед ним:

Module1.flag = 1 
Module2.flag = 1 

и в форм-модулей используют

Me.flag = 1 

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

Смежные вопросы