Тип переменной области видимости в языке VBA - PullRequest
3 голосов
/ 06 января 2012

Я пытаюсь понять тип области действия VBA, это невозможно сделать в VBA, но это возможно на другом языке (Java, Scala и т. Д.):

public sub try()

    dim myVar as String
    myvar = "hello world" 

    Call displayVar()

end sub

public sub displayVar()
   msgbox (myvar)
end sub

Можете ли вы дать мненекоторая информация об этом типе ограниченного объема?Это динамическое или лексическое, я не очень понимаю разницу: /

Ответы [ 2 ]

3 голосов
/ 06 января 2012

Франк Левек предоставил ясную и простую демонстрацию различия между локальными и глобальными объявлениями.

Однако, как и большинство языков, VBA позволяет передавать параметры подпрограммам.Иногда глобальная переменная является единственным выбором или единственным разумным выбором.Но обычно лучше объявить myVar в пределах try и передать его в качестве параметра displayVar.Это предотвращает случайное изменение displayVar на *1006*, так как по умолчанию параметры передаются как значения.Если вы хотите, чтобы подпрограмма изменила значение параметра, вы должны явно передать параметр в качестве ссылки.Это верно для большинства современных языков программирования.

Обратите также внимание, что Public означает, что эти подпрограммы видны подпрограммам в других модулях.Если Public был опущен или заменен на Private, try и displayVar были бы видны только внутри их модуля.

В приведенном ниже коде я передал значение myVar в качестве параметрадо displayVar.

Public Sub try()

  Dim myVar As String

  myvar = "hello world"
  Call displayVar(myVar)

End Sub

Public Sub displayVar(Stg As String)
  Call Msgbox(Stg, VBOKOnly)
End Sub
1 голос
/ 06 января 2012

Переменная myVar объявлена ​​в функции try ()

Таким образом, вы можете использовать ее только в области действия функции try ().

Под областью функции try () я имею в видувся инструкция, написанная между public sub try () и end sub.

Вы пытаетесь вызвать свою переменную из другой функции (displayVar).Которые определяют его собственную область видимости и не входят в область действия функции try.

Если вы хотите это, вы должны объявить свою переменную в глобальной области видимости (вне любой функции)

Например:

dim myVar as String

public sub try()

    myvar = "hello world" 

    Call displayVar()

end sub

public sub displayVar()
   msgbox (myvar)
end sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...