
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を探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[VBA] Classから他のClassを呼...
-
C#でのWebRequestでのPOSTについて
-
共通モジュールでDBへの接続と...
-
他のモジュールのプロシージャ...
-
コンポーネント指向って、どの...
-
worksheetFunctionクラスのVloo...
-
VBA シートのボタン名を変更し...
-
実行時エラー 438になった時の...
-
「Columns("A:C")」の列文字を...
-
VBAがブレークモードになっ...
-
ユーザーフォームを表示中にシ...
-
VBA ユーザーフォームの Keypre...
-
VBA(エクセル)で自動的にボタン...
-
エクセルの画像にツールチップ...
-
ユーザーフォーム上に現在日時...
-
エクセルのVBAの標準モジュール...
-
パソコンへの「Dropbox...
-
【C#/Java?】try-catchでcatch...
-
VBAで既に開いている別アプリケ...
-
実行時エラー48発生時のDLL特定...
マンスリーランキングこのカテゴリの人気マンスリー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を、クラスモジュール...
-
シーケンス図について。
おすすめ情報