62

これを実行したいのですが、コンパイルできません:

Public MyVariable as Integer = 123

これを達成する最善の方法は何ですか?

4

9 に答える 9

117

.NET は私たちを台無しにしました :) あなたの宣言は VBA に対して有効ではありません。

アプリケーションのロード時に値を指定できるのは、定数のみです。次のように宣言します。

Public Const APOSTROPHE_KEYCODE = 222

これは、私の vba プロジェクトの 1 つからのサンプル宣言です。

VBA 定数イメージ

パブリック変数を宣言し、その値を初期化したいものを探している場合は、 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 オブジェクト自体でサブを宣言していることを確認してください。 ここに画像の説明を入力

于 2011-05-05T13:48:47.120 に答える
12

別の角度を提供するために-

関数呼び出し間でパブリック変数を維持することはお勧めできません。使用する必要のある変数は、Subs と Functions に格納し、パラメーターとして渡す必要があります。コードの実行が完了したら、VBA プロジェクトが変数の値を維持することを期待しないでください。

この理由は、ワークブックの使用中に VBA プロジェクトを誤ってリセットする可能性があるものが多数あるためです。これが発生すると、パブリック変数はすべて 0 にリセットされます。

サブルーチンや関数の外部に値を保存する必要がある場合は、永続化する必要があるすべての情報に名前付き範囲を含む非表示のワークシートを使用することを強くお勧めします。

于 2011-05-05T14:04:15.567 に答える
9

確かに知っていますが、それが定数の場合、const MyVariable as Integer = 123そうでない場合は運が悪いです。変数には、別の場所で初期値を割り当てる必要があります。

あなたは出来る:

public property get myIntegerThing() as integer
    myIntegerThing= 123
end property

クラスモジュールでグローバルに作成します。

public cMyStuff as new MyStuffClass

なので即納cMyStuff.myIntegerThing可能です。

于 2011-05-05T12:53:25.777 に答える
4

上記のように、グローバルにアクセス可能な変数を宣言するには、 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
于 2015-08-11T11:20:52.653 に答える
1

一般宣言で変数を定義し、環境で発生する最初のイベントで初期化できます。

または、関連するプロパティを持つクラスを自分で作成し、Initialise メソッドで初期化することもできます

于 2011-05-05T12:55:44.397 に答える
-1

かなり時間が経ちましたが、これはあなたを満足させるかもしれません:

Public MyVariable as Integer: MyVariable = 123

変数名を再入力しなければならないので少し見にくいですが、1 行に収まっています。

于 2013-10-29T07:56:40.790 に答える