Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7905 / 13645 ツリー ←次へ | 前へ→

【36151】他のブックの定数を参照するには key 06/3/22(水) 19:56 質問[未読]
【36155】Re:他のブックの定数を参照するには ichinose 06/3/22(水) 21:18 発言[未読]
【36169】Re:他のブックの定数を参照するには key 06/3/23(木) 14:58 お礼[未読]

【36151】他のブックの定数を参照するには
質問  key  - 06/3/22(水) 19:56 -

引用なし
パスワード
   VBAで、book1.xlsからbook2.xlsに定義してある
定数を参照する方法はありますか?

定数を返す関数を作って間接的に参照する方法はわかりますが
定数を直接参照する方法がわかりません。

過去ログ12478はみましたが直接参照する方式は
とらなかったようで・・・。

【36155】Re:他のブックの定数を参照するには
発言  ichinose  - 06/3/22(水) 21:18 -

引用なし
パスワード
   ▼key さん:
こんばんは。

>VBAで、book1.xlsからbook2.xlsに定義してある
>定数を参照する方法はありますか?
そもそも定数を参照するという表現自体が間違いだと思いますが・・・。

方法としては、参照設定を行えば可能です。
新規ブック(Book1)の標準モジュールに

'==================================================
Public Const refdata = "参照できた!!"


と記述してください。

プロジェクトエクスプローラーで当該プロジェクトを選択した状態で

「ツール」---「VBAProjectのプロパティ」をクリックすると
VBAProjectのプロパティダイアログが表示されます。

全般タブのプロジェクト名を「Consttest1」に変更してOKをクリックして下さい。
適当なフォルダに「Consttest1.Xls」というブック名で保存してください。


プロジェクトエクスプローラーで別の新規ブック(Book2)を選択して状態で
「ツール」---「参照設定」とクリックし、参照設定ダイアログを表示させ
先ほどの「Consttest1」にチェックを入れてOKをクリックしてください。

このBook2の標準モジュールに

Sub main()
  MsgBox refdata
End Sub


このmainを実行すれば、consttest1.xlsの定数Refdataは使用出来ます。

まっ、なさりたい事とは違うと思いますが、確認はしてみて下さい。


>
>定数を返す関数を作って間接的に参照する方法はわかりますが
>定数を直接参照する方法がわかりません。
>
>過去ログ12478はみましたが直接参照する方式は
>とらなかったようで・・・。
できませんからねえ・・・。

Const で宣言する定数ってね、
VBAでは例えば、

Public Const refdata = "参照できた!!"

という記述で

メモリー上のどこかの番地(アドレス)に

Address  DATA
xxxx  参照できた!!

なんて登録されるわけではありません
(このように設定される言語もありますけど、Constとは意味が違うし、VBAでは
出来ないと思います)。

コンパイル時にPコード上のRefdataを"参照できた!!"に置き換えるだけです。
つまり、Refdataという実体はありません。
変数とは違います。


よって、12478のように定数を入れる変数や関数が必要になるのです。

【36169】Re:他のブックの定数を参照するには
お礼  key  - 06/3/23(木) 14:58 -

引用なし
パスワード
   はじめまして。
丁寧なレスありがとうございます。
基本的には、やりたいことはレスして頂いた内容の通りで合っています。

Book1の標準モジュールに
Public Const refdata = "参照できた!!"

と書いておいて、

Book2の標準モジュールで
Sub main()
  MsgBox refdata
End Sub
という感じでrefdata(の値)を使いたい、ということです。

ただ、参照設定という解決方法ではなくVBAのコードで実現
したかったんです・・・。でも結論からいくと無理のようですし、
しかたありません。まぁ代替方法もありますし。


>コンパイル時にPコード上のRefdataを"参照できた!!"に置き換えるだけです。
>つまり、Refdataという実体はありません。
>変数とは違います。

ご説明で、理屈は(たぶん)理解しました。
個人的感想として、自ブックの定数や関数が使える(当たり前の話ですが)のに、
他ブックの定数は使えない(でも関数は使える)のは不便だし、整合性がとれて
いないなぁとは思ってしまいますが。

とにかくありがとうございます。
ひとつ、勉強になりました。

7905 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free