重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

VB6で(正確にはExcelVBAですが)ちょっとプログラムを組んでいるのですが、
クラス内で、外部からアクセス可能な静的定数を宣言を行いたいのですが、
宣言方法が分からず止まってしまいました。
出来たかどうかも記憶にありません・・・。調べても分からず;;

Static Const var As String = "hoge"

みたいな事をしたいんですが、やり方が分かる方ご教示下さい。

A 回答 (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

とすると、双方を区別できます。
標準モジュールを用いて完全修飾するようにすれば、クラス内の静的変数と同じような振る舞いができます。
# ただ、同じ名前の変数が無ければ完全修飾しなくても使えてしまう欠点はありますが・・・
    • good
    • 0
この回答へのお礼

なるほど、、、VBでは標準モジュールを使って静的動作をさせるわけですか。
同じものの集まりがあっちこっちに分散されてやりづらいですねー。
昔はどうやって作ってたんだかもうすっかり忘れました・・・。

ありがとうございます。

お礼日時:2008/02/29 09:13

 OfficeのVersionにもよりますが、確かに現在もVBAは、VB6拡張仕様ですよね。


 .Netであれば、静的フィールド指定として、Shared が使えますが、VB6ではできない気がします。
 最も手っ取り早いには、やはりNew付で宣言し、自動でインスタンス化する事でしょうか?
    • good
    • 0

 外部とは、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"

こんな感じの・・・。

補足日時:2008/02/28 11:29
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!