2016-11-18 5 views
0

У меня есть проблема с глобальной переменнойглобальные переменные не работают

Я работаю с модулями в VBA

- В module5 это определить глобальной переменной

Public tes As Integer 

- В module6 Я определяю "TES"

Function a() 
    tes = 1 
End Function 

- в модуле я пытаюсь вызвать "TES" переменная

Sub test() 
    MsgBox tes 
End Sub 

Я полагаю, что результат должен показать 1, но показать 0

Интересно, что случилось

Thanks

Рэнди

+1

Вы вызываете 'Function a()' перед вызовом 'Sub test()'? – Comintern

+0

Является ли 'Module5' * стандартным модулем * (.bas) или модулем * класса * (.cls)? –

+0

Не должно ли оно быть публичной функцией? – user1

ответ

1

Если a не работает, tes никогда не назначается , Убедитесь, что a бежит, прежде чем читать tes и MsgBox покажет 1:

Sub test() 
    a 
    MsgBox tes 
End Sub 

Тем не менее, это, вероятно, лучше, чтобы передать tes в качестве параметра вместо дождевания глобальные переменные, которые могут быть изменены в любом месте.

Sub DoSomething() 
    Dim foo As Integer 
    foo = 1 
    Test foo 
End Sub 
Sub Test(ByVal value As Integer) 
    MsgBox value 
End Sub 

Переменные обычно должны быть настолько плотно, и область действия недолговечны, насколько это возможно; используйте глобальные переменные только тогда, когда вам необходимо их (это должно быть редко), а не каждый раз, когда функция/процедура должна получить доступ к некоторым данным.

+0

Хорошо заметен! спасибо за то, что вы помогли @ mat's Mug –

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