Excel VBA質問箱 IV

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

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


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

【26083】あるブックから別ブックのフォームを開く... のん 05/6/23(木) 11:50 質問[未読]
【26084】Re:あるブックから別ブックのフォームを開... りん 05/6/23(木) 12:00 回答[未読]
【26086】Re:あるブックから別ブックのフォームを開... のん 05/6/23(木) 13:15 質問[未読]
【26087】Re:あるブックから別ブックのフォームを開... りん 05/6/23(木) 13:27 発言[未読]
【26090】Re:あるブックから別ブックのフォームを... のん 05/6/23(木) 14:05 質問[未読]
【26091】Re:あるブックから別ブックのフォームを... りん 05/6/23(木) 14:15 発言[未読]
【26092】Re:あるブックから別ブックのフォームを... のん 05/6/23(木) 14:57 お礼[未読]

【26083】あるブックから別ブックのフォームを開く...
質問  のん  - 05/6/23(木) 11:50 -

引用なし
パスワード
   いつも参考にさせていただいております。
VBA初心者で四苦八苦しながらコードと闘っています。
excelでブック(仮にbook1)から別ブック(book2)のフォーム(form2)を開こうと思います。
フォームが開いた際にbook2をアクティブにし、
その上にform2が開くようにしたいのですが、
book1の上にform2が開いてしまいます。

下が、私がつくったコードです。 
book1ウィンドウを非表示にし、book2をアクティブにするコードをいれても、
form2を閉じてからでしかbook2がアクティブになりません。
form2起動時にbook2もアクティブにするにはどうしたらいいでしょうか?


  Workbooks.Open Filename:="book2.xls"
  Windows("book1").Visible = False
  ActiveWorkbook.Windows("book2").Activate
  Application.Run "book2.xls!ThisWorkbook.Openform2"

しょうもない質問であるかもしれませんが、回答いただけると幸いです。
よろしくお願いいたします。

【26084】Re:あるブックから別ブックのフォームを...
回答  りん E-MAIL  - 05/6/23(木) 12:00 -

引用なし
パスワード
   のん さん、こんにちわ。

>フォームが開いた際にbook2をアクティブにし、
>その上にform2が開くようにしたいのですが、
>book1の上にform2が開いてしまいます。
book2がアクティブになるだけでよいならば、フォームのActivateイベントにワークブックをアクティブにする記述を入れます。

Private Sub UserForm_Activate()
  ThisWorkbook.Activate 'UserFormのあるブックがBook2.xls=>Thisworkbook
End Sub

こんな感じです。

【26086】Re:あるブックから別ブックのフォームを...
質問  のん  - 05/6/23(木) 13:15 -

引用なし
パスワード
   りん さん さっそく回答いただきありがとうございます。

>book2がアクティブになるだけでよいならば、フォームのActivateイベントにワークブックをアクティブにする記述を入れます。
>
>Private Sub UserForm_Activate()
>  ThisWorkbook.Activate 'UserFormのあるブックがBook2.xls=>Thisworkbook
>
実はりんさんに教えていただいた方法も試してみて
確かに上記方法はbook2上でform2を開いた場合はうまくいくのです。
しかし、book1からbook2のform2を開くと
アクティブにはなるものの、やはりbook1の上にform2が表示されてしまうんです。
book2上でform2を開くように、book2のシートが表示された状態で
form2を開くにはどうすればよいのでしょうか?
説明不足ですいません。
またご回答いただければ幸いです。

【26087】Re:あるブックから別ブックのフォームを...
発言  りん E-MAIL  - 05/6/23(木) 13:27 -

引用なし
パスワード
   のん さん、こんにちわ。

>>Private Sub UserForm_Activate()
>>  ThisWorkbook.Activate 'UserFormのあるブックがBook2.xls=>Thisworkbook
>>
>実はりんさんに教えていただいた方法も試してみて
>確かに上記方法はbook2上でform2を開いた場合はうまくいくのです。
>しかし、book1からbook2のform2を開くと・・・

今回の動作実験内容
Book1.xls,Book2.xlsをDドライブのルートに保存
■Book1.xlsの標準モジュールに以下を記述
Sub test()
  Workbooks.Open Filename:="d:\book2.xls"
  Windows("book1.xls").Visible = False
  ActiveWorkbook.Windows("book2.xls").Activate
  Application.Run "book2.xls!ThisWorkbook.Openform2"
End Sub
■Book2.xlsにUserForm1を追加して、以下を記述
Private Sub UserForm_Activate()
  ThisWorkbook.Activate
End Sub
■Book2.xlsのThisworkbookに以下を記述
Sub Openform2()
  UserForm1.Show
End Sub

あと、気になるのは、
ActiveWorkbook.Windows("book2").Activate ←これがエラーにならないのが不思議です

もしかして、エラートラップ(On Error〜) 入れてますか?

【26090】Re:あるブックから別ブックのフォームを...
質問  のん  - 05/6/23(木) 14:05 -

引用なし
パスワード
   りん さん、何度も返信ありがとうございます。

>今回の動作実験内容
>Book1.xls,Book2.xlsをDドライブのルートに保存
>■Book1.xlsの標準モジュールに以下を記述・・・
動作内容は先ほどりんさんが表記してくださったとおりです。

>
>あと、気になるのは、
>ActiveWorkbook.Windows("book2").Activate ←これがエラーにならないのが不思議です
>
>もしかして、エラートラップ(On Error〜) 入れてますか?
上記どおりで、エラートラップは特にいれてません。
私としては、book2がアクティブになればいいと思いいれたのですが
なにかおかしい点はありますでしょうか?

すいません、初心者すぎてなにか悪いかということもわからないのです。
確かにbook2のuserformのactivateのイベントでも
同じ記述があるので不要な気もしますが、
おかしな点も教えていただければと思います。

【26091】Re:あるブックから別ブックのフォームを...
発言  りん E-MAIL  - 05/6/23(木) 14:15 -

引用なし
パスワード
   のん さん、こんにちわ。

>>今回の動作実験内容
>>Book1.xls,Book2.xlsをDドライブのルートに保存
>>■Book1.xlsの標準モジュールに以下を記述・・・
>動作内容は先ほどりんさんが表記してくださったとおりです。
さっきの動作実験の内容でブックを作ってみて動作させてみてください。
(保存先のドライブ、フォルダは自由にして、読込先をちゃんと指定してください)
のんさんの期待通りの動きをすれば、現在のコードに問題があるし、同様にエラーになるなら別の所に問題があると思われます。
ついでに、DoEventsを足してみてください。
Private Sub UserForm_Activate()
  ThisWorkbook.Activate
  DoEvents
End Sub

>>あと、気になるのは、
>>ActiveWorkbook.Windows("book2").Activate ←これがエラーにならないのが不思議です
>私としては、book2がアクティブになればいいと思いいれたのですが
Book2.xlsを開いた場合、そのウィンドウは
ActiveWorkbook.Windows("book2.xls").Activate
になると思うのですけど。

書き忘れていましたが、動作確認は Win98 & XL2Kです。

【26092】Re:あるブックから別ブックのフォームを...
お礼  のん  - 05/6/23(木) 14:57 -

引用なし
パスワード
   りん さん何度も迅速に回答していただきありがとうございました。
りんさんの言うとおりの動作実験をしたところ、
確かに私の期待通りの動作をしていました。

もう一度自分のコードを確認したところ、
画面の切り替わりが出ないように、

  Application.ScreenUpdating = False

↑のコードがありました。
初歩的なミスですいません。
上記コードをぬいたところ、確かに実験と同様の結果が得られました。

>Book2.xlsを開いた場合、そのウィンドウは
>ActiveWorkbook.Windows("book2.xls").Activate
>になると思うのですけど。
また、上記についてもりんさんのご指摘どおり(.xls)は
いれたコードにしておりました。
よく確認せずに本当にすいませんでした。

ご丁寧に最後までお付き合いいただき、本当に助かりました。
ありがとうございました。
今後さらに勉強していきたいとおもいます。

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