
No.3ベストアンサー
- 回答日時:
>クラス内で、外部からアクセス可能な静的定数を宣言を行いたい
VB6/VBAでのクラスは、Javaとは違いインスタンスを生成せずにクラス内のメソッドやプロパティにアクセスすることはできません。
「static」という修飾子は、プロシージャレベルのローカル変数か、
もしくは関数(sub,function)にしか使えません(ので、VB6やVBAではstaticは使わないのが普通です)。
もし、同じような振る舞いをさせたいのであれば標準モジュールを使用します。
「え?」と思われるかもしれませんが、試しに複数の標準モジュールに同じ名前のPublic Constを定義してみてください。
Module1:
Public Const TESTNAME As String = "test1"
Module2:
Public Const TESTNAME As String = "test2"
こうすると、TESTNAMEはプロジェクト内であれば何処からでも参照できますが、そのままでは
「名前が適切ではありません」と怒られてしまいます。
そこで、完全修飾をするわけです。
Module1.TESTNAME
Module2.TESTNAME
とすると、双方を区別できます。
標準モジュールを用いて完全修飾するようにすれば、クラス内の静的変数と同じような振る舞いができます。
# ただ、同じ名前の変数が無ければ完全修飾しなくても使えてしまう欠点はありますが・・・
なるほど、、、VBでは標準モジュールを使って静的動作をさせるわけですか。
同じものの集まりがあっちこっちに分散されてやりづらいですねー。
昔はどうやって作ってたんだかもうすっかり忘れました・・・。
ありがとうございます。
No.2
- 回答日時:
OfficeのVersionにもよりますが、確かに現在もVBAは、VB6拡張仕様ですよね。
.Netであれば、静的フィールド指定として、Shared が使えますが、VB6ではできない気がします。
最も手っ取り早いには、やはりNew付で宣言し、自動でインスタンス化する事でしょうか?
No.1
- 回答日時:
外部とは、Excel外部にあるVB6からのアクセスですよね?。
最も簡単には、ExcelのApplicationの、Application.Run(VBA内サブルーティン名,サブルーティンの引数リスト)
を使う手があります。引数に配列やObjectを渡せないの点は不便ですけど。
この回答への補足
すみません、外部という言葉が曖昧でした。
外部とは、クラスを利用するプログラムになります。
つまり、クラスを利用する標準モジュールなどで、クラスのインスタンス化を
行わずしてクラス内に宣言されている静的定数を利用したい、という事です。
[abc.bas]
public sub main()
msgbox def.var
end sub
[def.cls]
public static const var as String = "hoge"
こんな感じの・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
共通モジュールでDBへの接続と...
-
VB.netで、動的な型変換を行い...
-
Excel vbaで複数のテキストボッ...
-
[VBA] Classから他のClassを呼...
-
VB6で外部から静的アクセスが可...
-
他のモジュールのプロシージャ...
-
VBA モジュールレベル・パブリ...
-
実行時エラー 438になった時の...
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
VBA シートのボタン名を変更し...
-
ExcelVBAのユーザーフォームの...
-
ユーザーフォームを表示中にシ...
-
パソコンへの「Dropbox...
-
VBA(エクセル)で自動的にボタン...
-
テキストボックス中の文字列の...
-
エクセルのVBAの標準モジュール...
-
ウォッチ式の文字数制限について
-
【C#/Java?】try-catchでcatch...
-
クリックイベントなのに、2回ク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
共通モジュールでDBへの接続と...
-
[VBA] Classから他のClassを呼...
-
他のモジュールのプロシージャ...
-
VB.netで、動的な型変換を行い...
-
Excel vbaで複数のテキストボッ...
-
現在使用しているJAVAファイル...
-
WPFでCanvas の子要素にアクセ...
-
用語の意味の違いを教えてくだ...
-
VisualBasicへの取っ付き辛さ。...
-
VB.NETにて文字列で指定した関...
-
Visual-C#の event キーワー...
-
Python クラスとモジュールの...
-
Android / 型変数へのバインド?
-
【iOS】TextFieldでテキスト入...
-
Form1に記述されたスクリプトを...
-
C# Process.Start で標準入力
-
ExcelVBAでJavaのHashtableのよ...
-
VBA クラスにプロパティが実装...
-
VBAで、Functionを、クラスモジュール...
-
シーケンス図について。
おすすめ情報