
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で質問しましょう!
似たような質問が見つかりました
- HTML・CSS 全部のアクセスを指定したページに転送させたい 2 2022/06/28 16:33
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- その他(IT・Webサービス) ホームページにカウント数を表示する 2 2022/10/28 10:37
- 法学 不正アクセス禁止法の扱いについて 4 2022/03/23 18:13
- ドライブ・ストレージ 家庭用のNASについて 2 2022/07/05 18:30
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- JavaScript 条件に該当した時のみ定数を宣言する事はできますか 8 2023/03/15 05:55
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[VBA] Classから他のClassを呼...
-
他のモジュールのプロシージャ...
-
共通モジュールでDBへの接続と...
-
Android / 型変数へのバインド?
-
Excel vbaで複数のテキストボッ...
-
C# Process.Start で標準入力
-
用語の意味の違いを教えてくだ...
-
worksheetFunctionクラスのVloo...
-
VBA シートのボタン名を変更し...
-
「Columns("A:C")」の列文字を...
-
実行時エラー 438になった時の...
-
ユーザーフォームを表示中にシ...
-
【C#/Java?】try-catchでcatch...
-
ウォッチ式の文字数制限について
-
実行時エラー -'-2147417848
-
ExcelVBAのユーザーフォームの...
-
クリックイベントなのに、2回ク...
-
テキストボックス中の文字列の...
-
なぜこんな初歩的なVBAのIf文で...
-
実行時エラー 3265「要求された...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
共通モジュールでDBへの接続と...
-
[VBA] Classから他のClassを呼...
-
他のモジュールのプロシージャ...
-
VB.netで、動的な型変換を行い...
-
VB6で外部から静的アクセスが可...
-
Excel vbaで複数のテキストボッ...
-
WPFでCanvas の子要素にアクセ...
-
VBAで、Functionを、クラスモジュール...
-
Python クラスとモジュールの...
-
C#でのWebRequestでのPOSTについて
-
コンポーネント指向って、どの...
-
C# Process.Start で標準入力
-
用語の意味の違いを教えてくだ...
-
VBA クラスにプロパティが実装...
-
'StructLayout' の仕様について
-
VBA オブジェクト追加
-
現在使用しているJAVAファイル...
-
ジェネリクスについて
-
VB.NETにて文字列で指定した関...
-
Form2の変数をForm1に渡す方法...
おすすめ情報