Excel VBA質問箱 IV

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

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


12925 / 13646 ツリー ←次へ | 前へ→

【7694】別ブックからユーザーフォームを呼び出したい あくたいおん 03/9/12(金) 0:04 質問
【7695】Re:別ブックからユーザーフォームを呼び出... INA 03/9/12(金) 8:26 回答
【7696】Re:別ブックからユーザーフォームを呼び出... INA 03/9/12(金) 8:32 回答
【7714】Re:別ブックからユーザーフォームを呼び出... あくたいおん 03/9/16(火) 12:44 質問
【7717】Re:別ブックからユーザーフォームを呼び出... INA 03/9/16(火) 13:02 回答
【7826】Re:別ブックからユーザーフォームを呼び出... あくたいおん 03/9/19(金) 10:42 発言
【7827】Re:別ブックからユーザーフォームを呼び出... INA 03/9/19(金) 11:58 回答
【7949】Re:別ブックからユーザーフォームを呼び出... あくたいおん 03/9/25(木) 8:23 お礼

【7694】別ブックからユーザーフォームを呼び出し...
質問  あくたいおん  - 03/9/12(金) 0:04 -

引用なし
パスワード
   マクロを集めてマクロブックを作っています。
このブックに作成したユーザーフォームがあり、
これを、任意のユーザーが使う作業ブックから呼び出して使いたいと思っています。

・マクロブックは、作業をしてある間は立ち上がっている状態
・作業ブックは、任意のものなので、マクロの記述はマクロブックのみで。

単純に、マクロブックに
userform1.show
として、作業ブックからマクロを動かすと「インデックスが有効範囲にありません」とエラーが出てしまいます。
フルパスで指定できるかなと思い、
workbooks("<マクロブックのフルパス>").UserForm1.show
としてみましたが、うまくいきませんでした。

何か良い方法がありましたら、お知恵を貸していただきたいのですが。

よろしくお願いします。

【7695】Re:別ブックからユーザーフォームを呼び出...
回答  INA  - 03/9/12(金) 8:26 -

引用なし
パスワード
   >このブックに作成したユーザーフォームがあり、
>これを、任意のユーザーが使う作業ブックから呼び出して使いたいと思っています。
  
>・作業ブックは、任意のものなので、マクロの記述はマクロブックのみで。

マクロを使わずに作業ブックからどのようにユーザーフォームを呼び出すのでしょうか?

【7696】Re:別ブックからユーザーフォームを呼び出...
回答  INA  - 03/9/12(金) 8:32 -

引用なし
パスワード
   勘違いかもしれないですが・・・

<マクロブック.xls>

Sub Test1()
 Userfrom1.show
End Sub


<作業ブック.xls>
Sub Test2()
  Application.Run ("マクロブック.xls!test1")
End Sub

【7714】Re:別ブックからユーザーフォームを呼び出...
質問  あくたいおん  - 03/9/16(火) 12:44 -

引用なし
パスワード
   >マクロを使わずに作業ブックからどのようにユーザーフォームを呼び出すのでしょうか?

マクロブックを起動するときに、メニューバーを追加するようにしているので、
そのメニューからマクロを起動します。

>勘違いかもしれないですが・・・
>
><マクロブック.xls>
>
>Sub Test1()
> Userfrom1.show
>End Sub
>
>
><作業ブック.xls>
>Sub Test2()
>  Application.Run ("マクロブック.xls!test1")
>End Sub

ここで、作業ブックにマクロを書かないで、
「Userfrom1.show」
をしたいのですが、
単に「Userfrom1.show」と書いただけでは、作業ブックのユーザーフォームを
探しに行くみたいで「インデックスが有効範囲にありません」といわれてしまうんです。

これを言われないようにしたいわけですが、
どのようにしてマクロブックのユーザーフォームを指定するのかがわからないんです。


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

【7717】Re:別ブックからユーザーフォームを呼び出...
回答  INA  - 03/9/16(火) 13:02 -

引用なし
パスワード
   「ほかのブックのユーザーフォームを表示するには?」
ということであれば、
「他のブックのマクロを実行するには?」
と同じなので、
Application.Run "Book2.xls!Test1"

Application.Run "Book2.xls!CommandButton1_Click"
のように記述することが出来ます。
そして実行先のマクロで、
UserFrom1.Show としておけば良いでしょう。

【7826】Re:別ブックからユーザーフォームを呼び出...
発言  あくたいおん  - 03/9/19(金) 10:42 -

引用なし
パスワード
   >Application.Run "Book2.xls!Test1"
>や
>Application.Run "Book2.xls!CommandButton1_Click"
>のように記述することが出来ます。
>そして実行先のマクロで、
>UserFrom1.Show としておけば良いでしょう。

Application.Run "Book2.xls!Test1"ですね、

なるほどわかりました。

Book2.xls!(マクロブックのことですね)の指定の仕方ですが、
作業するブックと同時に開いているとOKですが、
閉じた状態ではできないようなんですが、
このとき、指定にフルパスが必要になるんであれば、
(このマクロブックは複数の人が使用するので、どこにあるのかを確定できない
 という事情がありまして(^_^;)
変数に入れて指定できるといいと考えました。
(thisbookにしてもってこれるかな?)

Application.Run以降のところで、ブックを変数に入れた形で指定とかはできるんでしょうか?
できるならそのやり方を教えていただけるとうれしいです。

【7827】Re:別ブックからユーザーフォームを呼び出...
回答  INA  - 03/9/19(金) 11:58 -

引用なし
パスワード
   >Book2.xls!(マクロブックのことですね)の指定の仕方ですが、
>作業するブックと同時に開いているとOKですが、
>閉じた状態ではできないようなんですが、
>このとき、指定にフルパスが必要になるんであれば、
ブックが開いているので、Application.Run にフルパスは必要ないです。

>Application.Run以降のところで、ブックを変数に入れた形で指定とか
>はできるんでしょうか?

サンプルコードを掲載しておきますので、参考にして下さい。
(GetOpenFilenameにSendkeysを組み合わせて、ファイル名を指定してあります。)

Private Sub CommandButton1_Click()
Dim OpenFileName As String
Dim MacroFileName As String

  MsgBox "マクロブック Book2.xls を開いて下さい。"
  
Application.ScreenUpdating = False
    
  '選択したフルパスを取得して変数に格納
  SendKeys "Book2*{ENTER}", False
  OpenFileName = Application.GetOpenFilename("対象のExcelマクロブックを選択して下さい。,*.xls")
  
  'ブックを開く
  Workbooks.Open OpenFileName
  
  'ファイル名を変数に格納
  MacroFileName = ActiveWorkbook.Name
  
  '別ブックのマクロ実行
  Application.Run MacroFileName & "!Test1"
  
  '別ブックを閉じる
  Workbooks(MacroFileName).Close

Application.ScreenUpdating = True

End Sub

【7949】Re:別ブックからユーザーフォームを呼び出...
お礼  あくたいおん  - 03/9/25(木) 8:23 -

引用なし
パスワード
   ▼INA さん:
>  Application.Run MacroFileName & "!Test1"
>  
>  '別ブックを閉じる
>  Workbooks(MacroFileName).Close
>

なるほど、& でつなぐことができるんですね。
これは知りませんでした。

アドバイスを参考にして作ってみます。
またつまずいたら訊きにくるかもしれませんが(^_^;

とりあえずはありがとうございました。

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