Excel VBA質問箱 IV

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

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


4769 / 13644 ツリー ←次へ | 前へ→

【54478】ファイルを閉じた時、別ファイルのユーザフォームを開きたい さる 08/3/14(金) 16:50 質問[未読]
【54479】Re:ファイルを閉じた時、別ファイルのユー... ハチ 08/3/14(金) 17:44 発言[未読]
【54561】Re:ファイルを閉じた時、別ファイルのユー... さる 08/3/19(水) 14:41 質問[未読]
【54568】Re:ファイルを閉じた時、別ファイルのユー... ハチ 08/3/19(水) 17:26 発言[未読]
【54570】Re:ファイルを閉じた時、別ファイルのユー... さる 08/3/19(水) 17:35 発言[未読]
【54575】Re:ファイルを閉じた時、別ファイルのユー... ハチ 08/3/21(金) 11:33 発言[未読]
【54577】Re:ファイルを閉じた時、別ファイルのユー... さる 08/3/21(金) 13:20 お礼[未読]
【54480】Re:ファイルを閉じた時、別ファイルのユー... ichinose 08/3/14(金) 18:12 発言[未読]
【54562】Re:ファイルを閉じた時、別ファイルのユー... さる 08/3/19(水) 14:49 発言[未読]

【54478】ファイルを閉じた時、別ファイルのユーザ...
質問  さる  - 08/3/14(金) 16:50 -

引用なし
パスワード
   はじめまして さるです。

ユーザフォームで作ったメニュー画面があり(ファイルA)、
その画面上に作ったボタンを押すと計算処理等を行う別のExcelファイル(ファイルB)を開くようにしています。
ファイルBを閉じると、ファイルAのユーザフォームを表示させてファイルBは閉じるようにしたいのですが、
ファイルBが開いたままになっていて困っています。

やりたい事は
1.ファイルAを開くと同時にユーザフォームが開く。
2.開いているファイルは常に1ファイルだけ。
の2点です。


プログラムはこのようにしています。
<ファイルA>
・ThisWorkBook
Private Sub Workbook_Open()
    userForm1.show
End Sub
として、起動時にユーザフォームを開くようにしています。

ユーザフォームのボタンを押した際は
Private Sub cmdボタンクリック_Click()
  Workbooks.Open ("ファイルB.xls")
  Unload frmMenu
  ThisWorkbook.Close savechanges:=False
End Sub
として、ファイルBを開いてファイルAは閉じるようにしています。

<ファイルB>
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Workbooks.Open ("ファイルA.xls")
End Sub
として、閉じる時にファイルAを開くようにしています。

このプログラムではファイルBの閉じた時、
「ファイルAが開いてユーザフォームが表示される&ファイルBは開いたまま」
となっています。
「ファイルAが開いてユーザフォームが表示される&ファイルBは閉じる」
としたいのですが良い手段をご存知であれば教えていただけないでしょうか?


ファイルBの『Workbooks.Open ("ファイルA.xls")』でファイルAが開いて
『Workbook_Open()プロシージャ』が動きますが、、
ファイルBのWorkbook_BeforeCloseがまだ終わっていないために
ファイルBが開いたままのようなのですが解決できませんでした。

【54479】Re:ファイルを閉じた時、別ファイルのユ...
発言  ハチ  - 08/3/14(金) 17:44 -

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

試してないので勘ですが、

>><ファイルA>
>・ThisWorkBook
>Private Sub Workbook_Open()
>    userForm1.show
>End Sub

UserForm1をモードレスにしたら出来るのでは?

【54480】Re:ファイルを閉じた時、別ファイルのユ...
発言  ichinose  - 08/3/14(金) 18:12 -

引用なし
パスワード
   ▼さる さん:
こんばんは。


><ファイルA>
>・ThisWorkBook
>Private Sub Workbook_Open()
>    userForm1.show
>End Sub
>として、起動時にユーザフォームを開くようにしています。
↑これを標準モジュールのAuto_Openに記述します

Sub auto_open()
  UserForm1.Show
  Workbooks.Open ThisWorkbook.Path & "\ファイルB.xls"
  Application.OnTime Now(), "ファイルB.xls!auto_open"
  ThisWorkbook.Close False
End Sub

>
>ユーザフォームのボタンを押した際は
>Private Sub cmdボタンクリック_Click()
  unload me
>End Sub

ボタンのクリックイベントはこれだけ。

同じように

ファイルBでも

標準モジュールでは

Sub auto_open()
  UserForm1.Show
  Workbooks.Open ThisWorkbook.Path & "\ファイルA.xls"
  Application.OnTime Now(), "ファイルA.xls!auto_open"
  ThisWorkbook.Close False
End Sub

ユーザーフォーム上のボタンクリックでは

Private Sub CommandButton1_Click()
  Unload Me
End Sub


これで試してみて下さい。

但し、延々繰り返すのでどこかで
止めるアルゴリズムは必要ですよ

【54561】Re:ファイルを閉じた時、別ファイルのユ...
質問  さる  - 08/3/19(水) 14:41 -

引用なし
パスワード
   ▼ハチ さん:
>▼さる さん:
>
>試してないので勘ですが、
>
>>><ファイルA>
>>・ThisWorkBook
>>Private Sub Workbook_Open()
>>    userForm1.show
>>End Sub
>
>UserForm1をモードレスにしたら出来るのでは?

遅くなってすいません。
返信ありがとうございます。

vbmodalessを付けて実行したところ、
ファイルBを閉じる時の「ファイルを保存しますか?」の選択次第で
うまくいく時とそうでない時がありました。

1.「はい」の場合
  うまくいきました。
2.「いいえ」の場合
  ファイルAをオープンした時に「マクロの有効/無効」を聞かれ、
  ファイルBが残ったままでした。
3.「キャンセル」の場合
  ファイルAをオープンした時に「マクロの有効/無効」は聞かれず、
  ファイルBが残ったままでした。

on error goto句で対応出来るかと試したのですがうまくいきませんでした。
2.、3.の時でもファイルBを消せる手段はあるのでしょうか?

【54562】Re:ファイルを閉じた時、別ファイルのユ...
発言  さる  - 08/3/19(水) 14:49 -

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

遅くなってすいません。
返信ありがとうございます。

すいません、こちらが言葉足らずな点があって、思っていた事が全ては伝わっていませんでした。
ファイルAから開くファイルは、ユーザフォーム上の押すボタン次第でファイルB、C、・・・のように複数あるため
ファイルAのauto_open()に

>  Workbooks.Open ThisWorkbook.Path & "\ファイルB.xls"
>  Application.OnTime Now(), "ファイルB.xls!auto_open"

と直接書くことは出来ないのです。

でもとても参考になりました。
ありがとうございます。
少し書き方を変えて形になりました。
ただ、はちさんの方法と同じ現象が起きました。。

------以下、はちさんへの返信の引用--------------
ファイルBを閉じる時の「ファイルを保存しますか?」の選択次第で
うまくいく時とそうでない時がありました。

1.「はい」の場合
  うまくいきました。
2.「いいえ」の場合
  ファイルAをオープンした時に「マクロの有効/無効」を聞かれ、
  ファイルBが残ったままでした。
3.「キャンセル」の場合
  ファイルAをオープンした時に「マクロの有効/無効」は聞かれず、
  ファイルBが残ったままでした。

on error goto句で対応出来るかと試したのですがうまくいきませんでした。
2.、3.の時でもファイルBを消せる手段はあるのでしょうか?

【54568】Re:ファイルを閉じた時、別ファイルのユ...
発言  ハチ  - 08/3/19(水) 17:26 -

引用なし
パスワード
   ▼さる さん:
>▼ハチ さん:
>>▼さる さん:
>>
>>試してないので勘ですが、
>>
>>>><ファイルA>
>>>・ThisWorkBook
>>>Private Sub Workbook_Open()
>>>    userForm1.show
>>>End Sub
>>
>>UserForm1をモードレスにしたら出来るのでは?
>
>遅くなってすいません。
>返信ありがとうございます。
>
>vbmodalessを付けて実行したところ、
>ファイルBを閉じる時の「ファイルを保存しますか?」の選択次第で
>うまくいく時とそうでない時がありました。
>
>1.「はい」の場合
>  うまくいきました。
>2.「いいえ」の場合
>  ファイルAをオープンした時に「マクロの有効/無効」を聞かれ、
>  ファイルBが残ったままでした。
>3.「キャンセル」の場合
>  ファイルAをオープンした時に「マクロの有効/無効」は聞かれず、
>  ファイルBが残ったままでした。
>
>on error goto句で対応出来るかと試したのですがうまくいきませんでした。
>2.、3.の時でもファイルBを消せる手段はあるのでしょうか?

自分の環境(Win2k,Excel2k)では、「マクロの有効/無効」を聞いてきません。
セキュリティの設定かもしれませんが。

「マクロの有効/無効」も消したいということですか?
それとも、常に1ファイルであれば良いということですか?

【54570】Re:ファイルを閉じた時、別ファイルのユ...
発言  さる  - 08/3/19(水) 17:35 -

引用なし
パスワード
   ▼ハチ さん:

>「マクロの有効/無効」も消したいということですか?
有効になるのであれば出ていても構わないです。
「保存しますか?」で「はい」を選択した際は出なかったので
気になりました。

>それとも、常に1ファイルであれば良いということですか?
はい、その通りです。
ファイルBを閉じたら
■ファイルAのユーザフォームを表示&ファイルBは閉じている
という状態にしたいです。

【54575】Re:ファイルを閉じた時、別ファイルのユ...
発言  ハチ  - 08/3/21(金) 11:33 -

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

>>それとも、常に1ファイルであれば良いということですか?
>はい、その通りです。
>ファイルBを閉じたら
>■ファイルAのユーザフォームを表示&ファイルBは閉じている
>という状態にしたいです。

自分の環境では、「いいえ」のときも正常に動作します。

「キャンセル」の場合はどうしたいのですか?
Bが残って、Aを開かないのが想定している動作かと思いますが、
_BeforeCloseで制御するのは難しいと思います。

あくまで案ですが・・

1.
Bを一度、上書き保存してメッセージが出力しなくする。

2.
AのWorkbooks.Openに
ThisWorkbook以外は全て閉じるマクロを追加する。

3.
A,Bのファイルとは別にファイルを監視するWorkBookを作る。

全部、試してません・・・

【54577】Re:ファイルを閉じた時、別ファイルのユ...
お礼  さる  - 08/3/21(金) 13:20 -

引用なし
パスワード
   ▼ハチ さん:

ハチさんの環境では「いいえ」も平気なんですね。
う〜ん。。

自分でも調べてみたところ「キャンセル」は難しいという
事はわかったので、保存確認用のユーザフォームを作ることにしました。
「はい」、「いいえ」、「キャンセル」共にうまく動いていそうです。


いろいろと教えていただき
ありがとうございました。

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