[[20181107103942]] 『ユーザーフォームのボタンから、別ブックにあるユ』(花子) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ユーザーフォームのボタンから、別ブックにあるユーザーフォームを開きたい』(花子)

ユーザーフォームのボタンを押すと、別ブックにあるユーザーフォームを開くことは可能でしょうか?
いろいろ調べたのですが、別ブックが開くところまで動くのですが、ユーザーフォームが表示されず上手くいきません。

< 使用 Excel:Excel2010、使用 OS:Windows10 >


例えば、別ブックのシートにActiveXのボタンが置かれていて、これを押せばフォームが開くようになっているならば、他ブックのボタンをクリックする事は可能です。 が、そんな綱渡り的な構成にせず、自ブックのフォームで全て処理すべきと思うのですけどね?
 Sub test()
     Dim wkBook As Workbook

     Set wkBook = Workbooks.Open("Book1.xlsm")
     Application.Run wkBook.Name & "!Sheet1.CommandButton1_Click"
 End Sub

ボタンになっておらず、Sheet1シートのシートモジュールにプロシジャ(例えば testというプロシジャ)が書いてあるような場合なら、以下。

     Application.Run wkBook.Name & "!Sheet1.test"
(???) 2018/11/07(水) 11:15

???さん有難うございます。
早速試しましたが

>Set wkBook = Workbooks.Open("abc.xlsm")

実行時エラー1004が起きて、別ブックが開かずに止まってしまいます。
どこか間違っているのでしょうか?↓

Sub btn1_Click()
  Dim wkBook As Workbook

  Set wkBook = Workbooks.Open("abc.xlsm")

    Application.Run wkBook.Name & "!xyz.CommandButton1_Click"

End Sub

(花子) 2018/11/07(水) 13:45


 "abc.xlsm"
 の部分はフルパス入れてみてください。
(ろっくん) 2018/11/07(水) 13:52

ろっくんさん有難うございます。
フルパスをいれてみたらabc.xlsmが開くところまで動きましたが、やはりユーザーフォームが開きませんでした。

>Application.Run wkBook.Name & "!xyz.CommandButton1_Click"
次の行で同じくエラー1004が起きます。
(花子) 2018/11/07(水) 14:08


実行したい先のブックには、「xyz」というシートが存在していて、「CommandButton1」というオブジェクト名のActiveXのボタンが置いてあって、それをクリックするとフォームを開くコードが書かれているのでしょうか?

見た通り、これはボタンを押す(押したときに動作するプロシジャを実行する)ためのコードであって、直接ユーザーフォームを開くものではありませんよ?(どこにもフォーム名を書いていませんよね)

他ブックのフォームを開くのはあくまでも他ブックのプロシジャであって、教えたのは他ブックのプロシジャを実行する方法です。
(???) 2018/11/07(水) 14:35


もちろんわかっています。
abc.xlsmのシートxyz上にActiveXのCommandButton1があり、これを押すとユーザーフォームが開くようになっています。
(花子) 2018/11/07(水) 14:50

うーん、エラー停止した状態で、イミディエイトウィンドウ上で以下を実行すると、ボタン名が表示されるでしょうか? 本来なら「CommandButton1」と表示されるはずですが。
 ? Workbooks("abc.xlsm").Sheets("xyz").CommandButton1.Name

エラーになる場合、シート名を正確に教えてください。 全角文字は他の全角、数字は他の数字等に置き換えて構いませんが、"○○/XXシート" を "xyz" のようには単純化しないようにお願いします。(または、本当にシート名が「xyz」というシートをコピー作成して試してみるとか)
(???) 2018/11/07(水) 15:33


 Workbooks("abc.xlsm").sheets("xyz").OLEObjects("CommandButton1").Object.Value = True

 >フルパスをいれてみたらabc.xlsmが開くところまで動きましたが

 って、開いてないの?
 上は、開いてないとだめです。

 ついでに言っておくと、開いたブックがマクロ無効状態だとだめ。
(BJ) 2018/11/07(水) 21:30

>???さん
有難うございます。

? Workbooks("abc.xlsm").Sheets("xyz").CommandButton1.Name

を実行したらすぐ下にCommandButton1と表示されました。
ちなみに正確な名前は、
abc.xlsmは 顧客管理.xlsm、
sheets("xyz")は sheets("顧客マスタ")です。

>BJさん
有難うございます。
ブックが開いた状態で実行しても同じエラー1004が出ます。

Application.Run wkBook.Name & "!顧客マスタ.CommandButtom1_Click"
↑デバックではここが原因のようです。

表示がうまく更新されていないとか、何か他に問題があるのでしょうか?
(花子) 2018/11/08(木) 08:41


Windows7の頃はこれで実現できていたのですが、Windows10だと何かセキュリティ関係で阻まれているのかもですね。 イミディエイトウィンドウで以下を実行しても、同じエラーになるのかと思います。
Application.Run "顧客管理.xlsm!顧客マスタ.CommandButton1_Click"

なので、ボタン名は正しく得られていたので、やり方を変えて、以下を試してみてください。

 Sub test()
     Dim wkBook As Workbook

     Set wkBook = Workbooks.Open("顧客管理.xlsm")
     Call wkBook.Sheets("顧客マスタ").CommandButton1_Click
 End Sub
(???) 2018/11/08(木) 10:38

 とりあえず、顧客管理.xlsmと、新規ブックだけが開いた状態で、新規ブックに下のコードを張り付けて試してください。
 動きそうにない、余計なコードは一切なし。
 当然、顧客管理.xlsmの方はマクロ有効になっていること。

 sub ajajja()
   Workbooks("顧客管理.xlsm").sheets("顧客マスタ").OLEObjects("CommandButton1").Object.Value = True
 end sub
(BJ) 2018/11/08(木) 13:52

>???さん
教えてもらったやり方でできました!
親切にしていただき、本当に有難うございました。

>BJさん
???さんのやり方で解決できたので、このやり方で進めようと思います。
有難うございました。
(花子) 2018/11/08(木) 14:11


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.