• 締切済み

excelマクロでのファイルオープン時の動作確認

仕事で使うexcelに大容量のデータベースを持ったファイルがあり、関数でそこから値を取得しているのですが、他のexcelを開いているときに誤って開いてしまうと計算が走ってしまい時間をロスしてしまいます。 誤って開いた場合でも、計算前にダイアログでyes/noの確認が出ればと思い、マクロで以下の通り ダイアログを作ってみたのですが、Workbook_Openでも関数の計算後に処理は実行されてしまうのでしょうか。 もしくは、他に関数の計算前に以下のような挙動を行わせる方法はないでしょうか。 (開く前に手動計算にすれば確かに回避は可能ですが、他のミスのリスク(手動計算に気付かず作業してしまう)もあり、できれば避けたいと思っています) ----------------- Private Sub Workbook_Open() Dim mac1 As Integer If Range("B2").Value = 1 Then mac1 = MsgBox("関数の計算を行いますか?", vbYesNo + vbQuestion, "確認") If mac1 = vbYes Then MsgBox "読み込みます" Else MsgBox "中断します" ThisWorkbook.Close SaveChanges:=False End If Else End If End Sub -----------------

みんなの回答

回答No.1

こんばんは。 Workbook_Open イベントでは、読み込み自体の中断は出来ないと思います。 読み込みを中断させるには、クラスイベントになるはずです。 簡単ですが、こんな風にしたらいかがでしょうか。 ちゃんと、試したわけではないので、明言できませんが。 '// Private Sub Workbook_Open()  Dim ret As VbMsgBoxResult  With Application   .Calculation = xlManual '手動   If MsgBox("自動計算を可能にしますか?", vbOKCancel) = vbOK Then    .Calculation = xlCalculationAutomatic   ElseIf MsgBox("ブックを閉じて良いですか?", vbOKCancel) = vbOK Then    .Calculation = xlCalculationAutomatic    ThisWorkbook.Close False   End If  End With End Sub '// 一応、このロジックには抜けがあって、自動計算を可能にはしないものの、ブックを閉じない選択をすると、自動計算オプションは、「手動」のままになります。だから、本来は、 Private Sub Workbook_BeforeClose(Cancel As Boolean)   Application.Calculation = xlCalculationAutomatic End Sub 戻すことを忘れないようにするために、このようなイベントを加える必要があると思います。