- ベストアンサー
VBA(エクセル)で自動的にボタンをクリックさせるには
いつもお世話になっております。 下記のことがしたいのですがどうやって良いのかがわからなくって困っております。 やりたいこと。 AブックとBブックが有るとします。(双方ともエクセルファイル) エクセルのVBAで、Aブックのシート上のコマンドボタンを押すと Bブックのシート上のコマンドボタンをクリックするという動きを VBAでさせたいのですがどうしてもクリックさせることができません。 試したこと。 初めは、AのボタンをクリックするとBのボタンをセレクトして SendKeysでENTERを送ってみたりしたのですがうまくいきませんでした。 何かやり方が有りましたら、お教えいただけませんでしょう。 宜しくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Privateスコープを変更しない場合、Application.Runメソッドを使う手もあります。 Application.Run "'C:\Book1.xls'!Sheet1.CommandButton1_Click" ※『Sheet1』の部分はシートモジュールのオブジェクト名になります。 ですが、Bブックのボタン_Clickの中味を標準モジュールに置いて、 AブックのボタンとBブックのボタンと、両方から実行できるようにしておくほうが良いような気もしますね。 (コマンドボタンが[フォーム]ボタンの事だったら、同じマクロを[マクロの登録]するだけの話?)
その他の回答 (2)
- pofstar
- ベストアンサー率50% (1/2)
ブックAのボタンが押されたら ブックBのボタンのコードが実行されるように しておく。というのはダメなのかな? 記述的にはブックやシートの指定が面倒かも知れませんが
お礼
pofstarさん、ご回答ありがとうございます。 >ブックAのボタンが押されたら >ブックBのボタンのコードが実行されるように >しておく。というのはダメなのかな? できる限り、ブックAではブックBを実行させるだけ のソースにしたいと思っております。 しかし、pofstarさんのご意見も参考にして、 色々考えてみたいと思います。 ありがとうございました。
- Masa2072
- ベストアンサー率51% (94/182)
Book1のSheet1にコマンドボタン(CommandButton1)を作成 Private Sub CommandButton1_Click() Msgbox "OK" End Sub ファイルをC:\Book1.xlsとして保存 Book2のSheet1にコマンドボタン(CommandButton1)を作成 Private Sub CommandButton1_Click() Call Workbooks.Open("C:\Book1.xls").Sheets("Sheet1").CommandButton1_Click End Sub この状態でBook1のボタンをクリックすると"OK"のメッセージボックスが表示されますが、 Book2のボタンをクリックすると「オブジェクトは、このプロパティまたはメソッドをさぽーとしていません。」というエラーが発生します。 この状態を回避するために、Book1の Private Sub CommandButton1_Click() を Public Sub CommandButton1_Click() と変更して保存します。 これでBook2のコードから、Book1のCommandButton1_Clickというモジュールを実行できます。
お礼
Masa2072さん、ご回答ありがとうございます。 早速試してみました!! Sheets("Sheet1").CommandButton1_Clickは以前挑戦して 駄目だったのですが、Publicにするだけで実行できるのでね。 勉強になりました!! ありがとうございました。
お礼
end-uさん、ご回答ありがとうございます。 Application.Run "'C:\Book1.xls'!Sheet1.CommandButton1_Click"で 無事できました!! >ですが、Bブックのボタン_Clickの中味を標準モジュールに置いて、 >AブックのボタンとBブックのボタンと、両方から実行できるようにしておくほうが良いような気もしますね。 また、上記のご意見を参考に色々考えてみたいと思います。 ありがとうございました。