- ベストアンサー
VB6で外部から静的アクセスが可能な定数
VB6で(正確にはExcelVBAですが)ちょっとプログラムを組んでいるのですが、 クラス内で、外部からアクセス可能な静的定数を宣言を行いたいのですが、 宣言方法が分からず止まってしまいました。 出来たかどうかも記憶にありません・・・。調べても分からず;; Static Const var As String = "hoge" みたいな事をしたいんですが、やり方が分かる方ご教示下さい。
- みんなの回答 (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 とすると、双方を区別できます。 標準モジュールを用いて完全修飾するようにすれば、クラス内の静的変数と同じような振る舞いができます。 # ただ、同じ名前の変数が無ければ完全修飾しなくても使えてしまう欠点はありますが・・・
その他の回答 (2)
OfficeのVersionにもよりますが、確かに現在もVBAは、VB6拡張仕様ですよね。 .Netであれば、静的フィールド指定として、Shared が使えますが、VB6ではできない気がします。 最も手っ取り早いには、やはりNew付で宣言し、自動でインスタンス化する事でしょうか?
外部とは、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" こんな感じの・・・。
お礼
なるほど、、、VBでは標準モジュールを使って静的動作をさせるわけですか。 同じものの集まりがあっちこっちに分散されてやりづらいですねー。 昔はどうやって作ってたんだかもうすっかり忘れました・・・。 ありがとうございます。