Excel VBA質問箱 IV

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

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


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

【12478】ファイル間の変数の受け渡し かとちゃん 04/4/5(月) 18:06 質問
【12480】Re:CellsのSelect範囲の問題について shousuke 04/4/5(月) 22:53 回答
【12488】ありがとうございました かとちゃん 04/4/6(火) 12:03 お礼
【12482】Re:ファイル間の変数の受け渡し ichinose 04/4/6(火) 0:53 回答
【12489】2 ができました かとちゃん 04/4/6(火) 12:13 お礼
【12529】Re:2 ができました ichinose 04/4/6(火) 22:39 発言
【12531】何度もありがございます かとちゃん 04/4/6(火) 22:49 回答
【12533】Re:何度もありがございます ichinose 04/4/7(水) 0:02 発言
【12571】週末に・・・ かとちゃん 04/4/7(水) 19:16 発言
【13062】Re:何度もありがございます かとちゃん 04/4/22(木) 12:01 発言
【13086】Re:何度もありがございます ichinose 04/4/22(木) 18:33 発言
【13092】Re:何度もありがございます かとちゃん 04/4/22(木) 23:05 お礼

【12478】ファイル間の変数の受け渡し
質問  かとちゃん  - 04/4/5(月) 18:06 -

引用なし
パスワード
   基本的な質問かもしれないのですが・・・

Excelではファイル間の変数の受け渡しはできるのでしょうか?

ファイルAで
 Public Const BaseDir As String = "abcde"
と定義した変数をファイルBで受け取ることはできるのでしょうか?

基本的な質問だったらすみません、どなたか教えてくださいませんか。

【12480】Re:CellsのSelect範囲の問題について
回答  shousuke WEB  - 04/4/5(月) 22:53 -

引用なし
パスワード
   >Excelではファイル間の変数の受け渡しはできるのでしょうか?
とありますが、受け渡しは出来ると思います。
ただ、この場合の受け渡しはどのように行う予定ですか?
該当のモジュールを含んだブックが開いている限り、その変数を使って
値の取り出しなどは出来るでしょう。
簡単な方法であれば、変数から値を取り出して、渡したいブックを開き、どっかの
セルに書き込むが一番簡単でしょう。これなら、変数の宣言の記述を気にせず
データが渡せます。

【12482】Re:ファイル間の変数の受け渡し
回答  ichinose  - 04/4/6(火) 0:53 -

引用なし
パスワード
   かとちゃん さん、shousukeさん
こんばんは。

>基本的な質問かもしれないのですが・・・
>
>Excelではファイル間の変数の受け渡しはできるのでしょうか?
        ↑これ、「ブック間」ですね!!
>ファイルAで
> Public Const BaseDir As String = "abcde"
>と定義した変数をファイルBで受け取ることはできるのでしょうか?
それからConstは、変数ではなく、定数ですよ!!

いくつか方法はあると思います。

shousukeさんがおっしゃっている
「セルを媒体にして値を受け取る」というのも方法のひとつだと思います。

他には、

1.ブックBでApplication.Runメソッドを使用する

ブックAの標準モジュールに
'=========================================
Public Const BaseDir As String = "abcde"
'=========================================
Function get_BaseDir()
  get_BaseDir = BaseDir
End Function
  
としておいて、
ブックBでは、
'=====================
Sub test()
  MsgBox Application.Run("ブックA!get_basedir")
End Sub

とする方法。


2.オブジェクトモジュールを使用する方法

ブックAの標準モジュールに
'=========================================
Public Const BaseDir As String = "abcde"

'(Public Constは、オブジェクトモジュールでは宣言できないので)

ブックAのThisWorkbookモジュールに
'=============================================
Function get_BaseDir()
  get_BaseDir = BaseDir
End Function


としておいて、
ブックBでは、
'=====================
Sub test()
  MsgBox Workbooks("ブックA").get_BaseDir
End Sub

とする方法。


3.ブックBでブックAを参照設定する方法

参照設定については、

http://www21.tok2.com/home/vbalab/bbs/c-board.cgi?cmd=one;no=11001;id=Excel

を参考にして下さい。

この場合、ブックBでは、
'=====================
Sub test()
  MsgBox BaseDir
End Sub

と直接参照できます。

確認してみて下さい。

【12488】ありがとうございました
お礼  かとちゃん  - 04/4/6(火) 12:03 -

引用なし
パスワード
   shousuke さん、ichinose さん、こんにちは。

>ただ、この場合の受け渡しはどのように行う予定ですか?
>該当のモジュールを含んだブックが開いている限り、その変数を使って
>値の取り出しなどは出来るでしょう。
>簡単な方法であれば、変数から値を取り出して、渡したいブックを開き、どっかの
>セルに書き込むが一番簡単でしょう。これなら、変数の宣言の記述を気にせず
>データが渡せます。

ブックAが開いている間だけのやり取りを考えています。
今試して見たところ上手くいったので、ユーザーと想定して友人に使ってみてもらったところ、そのセルを行ごと消してしまいました。
これを想定すると、ユーザーは何でもする可能性があるので、この方法は難しいと思います。
ただ、この方法は目から鱗でした。基本に返れということですよね。
本当にありがとうございました。

【12489】2 ができました
お礼  かとちゃん  - 04/4/6(火) 12:13 -

引用なし
パスワード
   ichinose さん、ありがとうございました。

>>Excelではファイル間の変数の受け渡しはできるのでしょうか?
>        ↑これ、「ブック間」ですね!!
はい、ブックです。言葉はちゃんとしないと誤解を生みますね。ありがとうございます。

>それからConstは、変数ではなく、定数ですよ!!
うっ!すみません、こんな基本もわかってなくて・・・。

>いくつか方法はあると思います。
>shousukeさんがおっしゃっている
>「セルを媒体にして値を受け取る」というのも方法のひとつだと思います。
これは友人にテストしてもらったところ、行ごと消してしまったので、難しいと思います。

>他には、
>1.ブックBでApplication.Runメソッドを使用する
これは MsgBox Application.Run("ブックA!get_basedir")
ここでエラーになりました。デバッグしたのですが、"ブックA!get_basedir" にマウスを合わせても表示されません。

>2.オブジェクトモジュールを使用する方法
ありがとうございます。上手くいきました!

>3.ブックBでブックAを参照設定する方法
これ今テスト中です。
私のレベルではちょっと時間がかかりそうなのでとりあえず、2の報告をします。
本当にありがとうございました。

【12529】Re:2 ができました
発言  ichinose  - 04/4/6(火) 22:39 -

引用なし
パスワード
   ▼かとちゃん さん:
こんばんは。

なんか・・、解決しちゃいましたか?


>>それからConstは、変数ではなく、定数ですよ!!
>うっ!すみません、こんな基本もわかってなくて・・・。

私もそうでした・・。


>>他には、
>>1.ブックBでApplication.Runメソッドを使用する
>これは MsgBox Application.Run("ブックA!get_basedir")
>ここでエラーになりました。デバッグしたのですが、"ブックA!get_basedir" にマウスを合わせても表示されません。
この方法は、私は、何度となく使用していますから、OKのはずなんですが?

エラーの内容は何でしょうか?
それから、Excelのバージョンは?
私は、Excel2000で確認しています。


>>2.オブジェクトモジュールを使用する方法
>ありがとうございます。上手くいきました!

↑でうまくいったみたいなので、もう見ては頂けないかもしれませんが、
もし、見てたら「1.」も再度確認してみて下さい!!

【12531】何度もありがございます
回答  かとちゃん  - 04/4/6(火) 22:49 -

引用なし
パスワード
   ichinose さん、こんばんは。
ほんとに今日はありがとうございました。

>>>1.ブックBでApplication.Runメソッドを使用する
>>これは MsgBox Application.Run("ブックA!get_basedir")
>この方法は、私は、何度となく使用していますから、OKのはずなんですが?
>エラーの内容は何でしょうか?
>それから、Excelのバージョンは?
>私は、Excel2000で確認しています。

メッセージが出ずに、VBAのこの行が黄色く反転されるだけなんですよ。
何がまずいんでしょうねぇ
EXCEL2000で検証しています。

>>>2.オブジェクトモジュールを使用する方法
>↑でうまくいったみたいなので、もう見ては頂けないかもしれませんが、
>もし、見てたら「1.」も再度確認してみて下さい!!

見ました見ました!でも3は私には理解不能でした・・・・とほほ、ですね。

【12533】Re:何度もありがございます
発言  ichinose  - 04/4/7(水) 0:02 -

引用なし
パスワード
   ▼かとちゃん さん:

>
>>>>1.ブックBでApplication.Runメソッドを使用する
>>>これは MsgBox Application.Run("ブックA!get_basedir")
>>この方法は、私は、何度となく使用していますから、OKのはずなんですが?
>>エラーの内容は何でしょうか?
>>それから、Excelのバージョンは?
>>私は、Excel2000で確認しています。
>
>メッセージが出ずに、VBAのこの行が黄色く反転されるだけなんですよ。
>何がまずいんでしょうねぇ
>EXCEL2000で検証しています。
エラーメッセージが出ないんですか?
何度かテストしたんですが、再現できませんでした。
例えば、

Application.Run("ブックA!get_basedir")

のブック名又は、Function名に誤りがあった場合は、

「'Run' メソッドは失敗しました: '_Application' オブジェクト--1004」

とか、

「マクロ 'ブック A!get_basedir' が見つかりません。--1004」

なんていうメッセージが表示されるんですけどねえ!!

細かく調べて環境を一致させるしかないと思いますが・・・。

ちなみにブックB側で

'=========================================================
Sub test()
  On Error Resume Next
  Dim ans
  ans = Application.Run("'ブックA'!get_basedir")
  If Err.Number <> 0 Then
   MsgBox Error(Err.Number) & "--" & Err.Number
  Else
   MsgBox ans
   End If
End Sub

としたらどうでしょうか?(なんかこれでは駄目なような気がしますが)

それから再度環境確認ですが・・・、

Win98+Excel2000(SP-3)です。

エラーメッセージが表示されないのが気になります・・。

【12571】週末に・・・
発言  かとちゃん  - 04/4/7(水) 19:16 -

引用なし
パスワード
   ichinose さん、こんばんは

>エラーメッセージが表示されないのが気になります・・。

そーなんですよ!エラーを表示させない記述があるのかもしれないので、新たにファイルを作成して試してみます。

今日から金曜まで出張なので週末にやってみますね。
ホントに何度もありがとうございます。
必ず試して報告します。

【13062】Re:何度もありがございます
発言  かとちゃん  - 04/4/22(木) 12:01 -

引用なし
パスワード
   こんにちは、ichinose さん
返事がすごく遅くなってしまいすみません。

>>>>>1.ブックBでApplication.Runメソッドを使用する
>>>>これは MsgBox Application.Run("ブックA!get_basedir")
>エラーメッセージが出ないんですか?
>何度かテストしたんですが、再現できませんでした。
>Application.Run("ブックA!get_basedir")
>のブック名又は、Function名に誤りがあった場合は、
>「'Run' メソッドは失敗しました: '_Application' オブジェクト--1004」
>「マクロ 'ブック A!get_basedir' が見つかりません。--1004」
>なんていうメッセージが表示されるんですけどねえ!!

これは同じく黄色に反転するだけなんです。

>ちなみにブックB側で
>'=========================================================
>Sub test()
>  On Error Resume Next
>  Dim ans
>  ans = Application.Run("'ブックA'!get_basedir")
>  If Err.Number <> 0 Then
>   MsgBox Error(Err.Number) & "--" & Err.Number
>  Else
>   MsgBox ans
>   End If
>End Sub
>としたらどうでしょうか?(なんかこれでは駄目なような気がしますが)

で,できましたっ!!すごい!こんな記述は知りませんでした!
Dim ans As String ではなく、Dim ans とは何の定義なんですか?
 
>それから再度環境確認ですが・・・、
>Win98+Excel2000(SP-3)です。

WinEP+Excel2000(SP-3)です。

>エラーメッセージが表示されないのが気になります・・。

そうなんですよ、他のマクロではエラーが表示されます。これだけなんですよ。

【13086】Re:何度もありがございます
発言  ichinose  - 04/4/22(木) 18:33 -

引用なし
パスワード
   ▼かとちゃん さん:
こんにちは。もう、こんばんはだった。

>>ちなみにブックB側で
>>'=========================================================
>>Sub test()
>>  On Error Resume Next
>>  Dim ans
>>  ans = Application.Run("'ブックA'!get_basedir")
>>  If Err.Number <> 0 Then
>>   MsgBox Error(Err.Number) & "--" & Err.Number
>>  Else
>>   MsgBox ans
>>   End If
>>End Sub
>>としたらどうでしょうか?(なんかこれでは駄目なような気がしますが)
>
>で,できましたっ!!すごい!こんな記述は知りませんでした!
>Dim ans As String ではなく、Dim ans とは何の定義なんですか?

わかりません。上記のコードでOKで、前回までのコードがNG・・・。
私は、こういう不可解な現象を確認すると、Officeを入れ替えてしまいますが・・。
ごめんなさい、原因は???です。

【13092】Re:何度もありがございます
お礼  かとちゃん  - 04/4/22(木) 23:05 -

引用なし
パスワード
   ichinose さん、こんばんは。

>わかりません。上記のコードでOKで、前回までのコードがNG・・・。
>私は、こういう不可解な現象を確認すると、Officeを入れ替えてしまいますが・・。
>ごめんなさい、原因は???です。

そうでした!こんなときにはその手がありましたね。
それではやってみます。
ホントにいろいろありがとうございました!

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