Excel VBA質問箱 IV

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

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


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

【72349】他ブックのデータ取得 亜矢 12/7/20(金) 6:35 質問[未読]
【72350】Re:他ブックのデータ取得 kanabun 12/7/20(金) 9:20 発言[未読]
【72352】Re:他ブックのデータ取得 亜矢 12/7/20(金) 11:07 質問[未読]
【72353】Re:他ブックのデータ取得 kanabun 12/7/20(金) 11:55 発言[未読]
【72354】Re:他ブックのデータ取得 UO3 12/7/20(金) 12:00 発言[未読]
【72356】Re:他ブックのデータ取得 kanabun 12/7/20(金) 13:06 発言[未読]
【72351】Re:他ブックのデータ取得 ichinose 12/7/20(金) 11:07 発言[未読]
【72355】Re:他ブックのデータ取得 亜矢 12/7/20(金) 12:53 質問[未読]
【72357】Re:他ブックのデータ取得 UO3 12/7/20(金) 13:45 発言[未読]
【72358】Re:他ブックのデータ取得 亜矢 12/7/20(金) 14:36 お礼[未読]

【72349】他ブックのデータ取得
質問  亜矢  - 12/7/20(金) 6:35 -

引用なし
パスワード
   よろしくお願いします。
 今BookAとBooKB,BookCがあります。
 本体はBookAでBookBの名前は”市内・・・.xlsb,BookCは”県外・・・.xlsbです
 BookBとBookCはデータが市内用が県外用かの違いで基本は同じです。
 
 ここでBookBのコマンドボタンを押したときにBookAのマクロが起動する様に
 なっています。(当然BookCも同じです)Application.run・・・・・

 質問です。
  BooKAのマクロを起動した時にBookBのボタンが押されたか、BookCの
 ボタンが押されたかを取得したいと思います。
 方法が見つかりません。ご指導よろしくお願いします。
 

【72350】Re:他ブックのデータ取得
発言  kanabun  - 12/7/20(金) 9:20 -

引用なし
パスワード
   ▼亜矢 さん:

>  BooKAのマクロを起動した時にBookBのボタンが押されたか、BookCの
> ボタンが押されたかを取得したいと思います。

ボタンが押されたときは そのボタンのあるBookがアクティブになって
いるわけだから、

  ActiveWorkbook.Name

で判別できませんか?

【72351】Re:他ブックのデータ取得
発言  ichinose  - 12/7/20(金) 11:07 -

引用なし
パスワード
   こんにちは。


> 質問です。
>  BooKAのマクロを起動した時にBookBのボタンが押されたか、BookCの
> ボタンが押されたかを取得したいと思います。

呼び出されるBooKAのマクロに呼び出し元をパラメータで送る方法は?

いかがですか

【72352】Re:他ブックのデータ取得
質問  亜矢  - 12/7/20(金) 11:07 -

引用なし
パスワード
   ▼kanabun さん:
>▼亜矢 さん:
>
>>  BooKAのマクロを起動した時にBookBのボタンが押されたか、BookCの
>> ボタンが押されたかを取得したいと思います。
>
>ボタンが押されたときは そのボタンのあるBookがアクティブになって
>いるわけだから、
>
>  ActiveWorkbook.Name
>
>で判別できませんか?
 早速のご指導ありがとうございます。
上記は理解しました。
 BookBのコマンドボタン2には(BookCのコマンドボタン2も同じ)
Private Sub CommandButton2_Click()
  Application.Run "BookA.XLSB!U66データ追加"
end sub
このとき
 "BookA.XLSB!U66データ追加"にActiveWorkbook.Nameを渡したいと思って
 います。
 よろしくお願いします。

【72353】Re:他ブックのデータ取得
発言  kanabun  - 12/7/20(金) 11:55 -

引用なし
パスワード
   ▼亜矢 さん:

> "BookA.XLSB!U66データ追加"にActiveWorkbook.Nameを渡したいと思って
> います。

というか、"BookA.XLSB!U66データ追加" マクロの中で、
ActiveWorkbook.Name に 「市内」が含まれているか、「県外」が
含まれているかで
処理を分岐したい
ということなのでしょう?


> よろしくお願いします。

データ追加 マクロの中身が分からないので、
こちらでは なんとも。

【72354】Re:他ブックのデータ取得
発言  UO3  - 12/7/20(金) 12:00 -

引用なし
パスワード
   ▼亜矢 さん:

こんにちは
もちろん、パラメータとして文字列を渡すこともできますし、
その用途によっては、シートオブジェクトやブックオブジェクトも渡すことができます。

ichinoseさんがおっしゃっているように、パラメータで渡すのが【王道】だとおもいます。

一方、操作ということを考えますと、コマンドボタンを押すということは
kanabunさんが指摘されるように、その時点で、そのブックがアクティブブック、
そのシートがアクティブシートになっているわけですから呼び出しがわは何もせず
U66データ追加 側で ActiveWorkbook や ActiveSheet の参照が可能なんですけど?

【72355】Re:他ブックのデータ取得
質問  亜矢  - 12/7/20(金) 12:53 -

引用なし
パスワード
   ▼ichinose さん:
>こんにちは。
>
>
>> 質問です。
>>  BooKAのマクロを起動した時にBookBのボタンが押されたか、BookCの
>> ボタンが押されたかを取得したいと思います。
>
>呼び出されるBooKAのマクロに呼び出し元をパラメータで送る方法は?
>
>いかがですか
 ありがとうございます。
 早速ですが、そのパラメータで送る方法を教えて頂きたいと思います
 BooKAのマクロ側にボタンを押したブックの名前を送りたいと思います。
 よろしくお願いします。

【72356】Re:他ブックのデータ取得
発言  kanabun  - 12/7/20(金) 13:06 -

引用なし
パスワード
   ▼亜矢 さん:
ちょっと横道で、すみません...

ボタンといってもいろいろあります。

亜矢さんのばあい
> BookBのコマンドボタン2には(BookCのコマンドボタン2も同じ)
> Private Sub CommandButton2_Click()
>  Application.Run "BookA.XLSB!U66データ追加"
> end sub

CommandButton を使っていますから、シートモジュールに
プロシージャつくって、その中に
  Application.Run メソッド
で他Bookのマクロを呼び出す
という動作を記述する
ことになりますが、

ご存知のように、マクロボタンは
オートシェイプなど図形にすることも可能です。
そして、すべての図形には「マクロの登録」が可能です。
図形の右クリックメニューの「マクロの登録」から
> "BookA.XLSB!U66データ追加"
を一覧から選んで、登録しておけば、
Application.Run を走らせるコードを書く必要がなくなります。
U66データ追加 マクロ側で、どのボタンから呼ばれたかは
Application.Caller で ボタンの名前(図形の名前)が取得可能
ですので、ボタンの名前をBook名を反映したものに修正しておけば
ボタン名から呼び出し元のBookを判断することもできます。


# 以下、余談の余談ですが m(_ _)m

図形でお勧め(いかにもCommandButton っぽいの)は
AutoShapeの「額縁」ってやつです(^^

図形描画ツールバーの中から「額縁」をシートにおいて
書式設定の「図の塗りつぶし」で上下のグラデーションをセット
しておくと、CommandButtonよりは体裁のいい(目を惹く)マクロ
ボタンをつくることができます。

【72357】Re:他ブックのデータ取得
発言  UO3  - 12/7/20(金) 13:45 -

引用なし
パスワード
   ▼亜矢 さん:

こんにちは。横から失礼します。

申し上げているように、引数でブック情報を渡さなくても呼び出された側で、
その情報を取得できるのですが、引数で渡すとすれば、たとえば、以下の
CommandButton2 や CommandButton3 のような形で記述します。

Private Sub CommandButton1_Click()
  Application.Run "呼び出されるブック名!Test1"
End Sub

Private Sub CommandButton2_Click()
  Application.Run "呼び出されるブック名!Test2", ThisWorkbook
End Sub

Private Sub CommandButton3_Click()
  Application.Run "呼び出されるブック名!Test3", ThisWorkbook.Name
End Sub

で、呼び出される側の標準モジュールで

Sub Test1()
  MsgBox ActiveWorkbook.Name
End Sub

Sub Test2(wb As Workbook)
  MsgBox wb.Name
End Sub

Sub Test3(wbn As String)
  MsgBox wbn
End Sub

このようにしてCommandButton1,2,3 いずれをおしても同じ情報が取得できることが
わたると思います。逆に言えば、CommandButton1 --> Test1 の組み合わせでも
なんら問題はないということなんですが?

また、kanabunさんからご提案があるフォームツールボタンもご検討ください。
これについても、呼び出される側のマクロを Test1 のようにしておけば問題ありませんので。

【72358】Re:他ブックのデータ取得
お礼  亜矢  - 12/7/20(金) 14:36 -

引用なし
パスワード
   ▼UO3 さん:
>▼亜矢 さん:
>
>こんにちは。横から失礼します。
>
>申し上げているように、引数でブック情報を渡さなくても呼び出された側で、
>その情報を取得できるのですが、引数で渡すとすれば、たとえば、以下の
>CommandButton2 や CommandButton3 のような形で記述します。
>
>Private Sub CommandButton1_Click()
>  Application.Run "呼び出されるブック名!Test1"
>End Sub
>
>Private Sub CommandButton2_Click()
>  Application.Run "呼び出されるブック名!Test2", ThisWorkbook
>End Sub
>
>Private Sub CommandButton3_Click()
>  Application.Run "呼び出されるブック名!Test3", ThisWorkbook.Name
>End Sub
>
>で、呼び出される側の標準モジュールで
>
>Sub Test1()
>  MsgBox ActiveWorkbook.Name
>End Sub
>
>Sub Test2(wb As Workbook)
>  MsgBox wb.Name
>End Sub
>
>Sub Test3(wbn As String)
>  MsgBox wbn
>End Sub
>
>このようにしてCommandButton1,2,3 いずれをおしても同じ情報が取得できることが
>わたると思います。逆に言えば、CommandButton1 --> Test1 の組み合わせでも
>なんら問題はないということなんですが?
>
>また、kanabunさんからご提案があるフォームツールボタンもご検討ください。
>これについても、呼び出される側のマクロを Test1 のようにしておけば問題ありませんので。
皆様色々お手数をお掛けしました。ありがとうございました。
 解決できました。

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