私はこれをしたいのですが、コンパイルされません:
Public MyVariable as Integer = 123
これを達成する最良の方法は何ですか?
.NETが私たちをだめにしています:)あなたの宣言はVBAには無効です。
アプリケーションのロード時に値を指定できるのは定数のみです。次のように宣言します。
Public Const APOSTROPHE_KEYCODE = 222
これは私のVBAプロジェクトの1つからのサンプル宣言です。
パブリック変数を宣言し、その値を初期化するものを探している場合は、Workbook_Openサブルーチンを作成し、そこで初期化を行う必要があります。例:
Private Sub Workbook_Open()
Dim iAnswer As Integer
InitializeListSheetDataColumns_S
HideAllMonths_S
If sheetSetupInfo.Range("D6").Value = "Enter Facility Name" Then
iAnswer = MsgBox("It appears you have not yet set up this workbook. Would you like to do so now?", vbYesNo)
If iAnswer = vbYes Then
sheetSetupInfo.Activate
sheetSetupInfo.Range("D6").Select
Exit Sub
End If
End If
Application.Calculation = xlCalculationAutomatic
sheetGeneralInfo.Activate
Load frmInfoSheet
frmInfoSheet.Show
End Sub
Workbookオブジェクト自体でsubを宣言してください:
別の角度を提供するために-
関数呼び出し間でパブリック変数を維持することはお勧めできません。使用する必要がある変数は、SubsとFunctionsに保存し、パラメーターとして渡す必要があります。コードの実行が完了したら、VBAプロジェクトが変数の値を保持することを期待しないでください。
この理由は、ワークブックの使用中にVBAプロジェクトを誤ってリセットする可能性のあるものが非常に多いためです。これが発生すると、すべてのパブリック変数が0にリセットされます。
サブルーチンおよび関数の外部に値を保存する必要がある場合、永続化する必要がある情報については、名前付き範囲のある非表示のワークシートを使用することを強くお勧めします。
確かに知っていますが、その定数がconst MyVariable as Integer = 123
である場合、それ以外の場合は不運です。変数には他の場所で初期値を割り当てる必要があります。
あなたは出来る:
public property get myIntegerThing() as integer
myIntegerThing= 123
end property
クラスモジュールでグローバルに作成します。
public cMyStuff as new MyStuffClass
したがって、cMyStuff.myIntegerThing
はすぐに利用可能です。
これは、初期化されたグローバル定数が必要なときに私がすることです:
1。 Globals
というモジュールを追加します
2。次のようなプロパティをGlobals
モジュールに追加します。
Property Get PSIStartRow() As Integer
PSIStartRow = Sheets("FOB Prices").Range("F1").Value
End Property
Property Get PSIStartCell() As String
PSIStartCell = "B" & PSIStartRow
End Property
一般宣言で変数を定義し、環境で発生する最初のイベントで変数を初期化できます。
または、関連するプロパティを持つクラスを自分で作成し、Initialiseメソッドで初期化することもできます
上で述べたように、グローバルなアクセス可能な変数を宣言するには、publicキーワードで始まる関数の外でそれを行うことができます。
また、影響はプロシージャの外部では許可されないため、たとえば、パブリック変数を初期化するInitGlobalsというサブを作成し、ステートメントの先頭でこのサブルーチンを呼び出すことができます。
以下に例を示します。
Public Coordinates(3) as Double
Public Heat as double
Public Weight as double
Sub InitGlobals()
Coordinates(1)=10.5
Coordinates(2)=22.54
Coordinates(3)=-100.5
Heat=25.5
Weight=70
End Sub
Sub MyWorkSGoesHere()
Call InitGlobals
'Now you can do your work using your global variables initialized as you wanted them to be.
End Sub