マンガでよめる痔のこと・薬のこと

仕事で使う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
-----------------

このQ&Aに関連する最新のQ&A

A 回答 (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

戻すことを忘れないようにするために、このようなイベントを加える必要があると思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング