3

私は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

このタイプの制限されたスコープについての情報を教えてください。それは動的または語彙です、私は違いを本当に理解していません:/

4

2 に答える 2

3

Franck Levequeは、ローカル宣言とグローバル宣言の違いを明確かつ簡単に示しています。

ただし、ほとんどの言語と同様に、VBAではパラメータをサブルーチンに渡すことができます。グローバル変数が唯一の選択肢または唯一の賢明な選択肢である場合があります。myVarただし、通常は、内で宣言tryし、パラメーターとしてに渡す方が適切displayVarです。これにより、デフォルトでパラメータが値として渡されるため、displayVar誤って変更されるのを防ぐことができます。myVarサブルーチンでパラメーターの値を変更する場合は、パラメーターを参照として明示的に渡す必要があります。これは、ほとんどの最新のプログラミング言語に当てはまります。

Publicまた、これらのサブルーチンが他のモジュールのサブルーチンに表示されることも意味します。Public省略または置換された場合Private、モジュール内でのみ表示されますtrydisplayVar

以下のコードでは、の値を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
于 2012-01-06T09:54:02.107 に答える
1

変数myVarは関数try()で宣言されています

そのため、try()関数スコープでのみ使用できます。

try()関数スコープとは、public sub try()とendsubの間に記述されたすべての命令を意味します。

別の関数(displayVar)から変数を呼び出そうとしました。これは、それ自体のスコープを定義し、try関数スコープ内にはありません。

これが必要な場合は、グローバルスコープ(関数の外)で変数を宣言する必要があります

例えば ​​:

dim myVar as String

public sub try()

    myvar = "hello world" 

    Call displayVar()

end sub

public sub displayVar()
   msgbox (myvar)
end sub
于 2012-01-06T09:15:28.740 に答える