
こんにちは。
エクセルのVBAについて最近勉強を始めた初心者です。
下記について知恵をお借りしたく、質問させて頂きます。
4つのシートで構成されているブックがあります。(他ブックとの連動はありません)
シート1は集計表で、シート2~4はシート1の元データーが入っています。
本体はシート1のみ手動計算にしたいのですが、現状は以下の方法を取っています。
(1)ブックを開くと、ブック全体を手動計算にする
(2)必要なタイミングで、シート1の特定セル範囲(3パターンあり)を再計算させるマクロを実行
(3)ブックを閉じると、自動計算に戻す
こちらの方法でほぼ問題無いように思えたのですが、
ブックを閉じる時にエクセルの仕様で『'ファイル名.xls'への変更を保存しますか?』と聞かれますよね。
そこで"キャンセル"を選択すると、ブックは開いたまま自動計算モードに戻る=シート1が再計算されてしまうのです。
(このタイミングで(3)(Workbook_BeforeClose)のコードが走っているのだと思います)
先述の通り、本来手動計算にしたいのはシート1に限定されており、
シート2~4は自動計算で構いません。
やりたい事をまとめると、
■ブックを開く :シート1=手動計算、シート2~4=自動計算
■ブックを閉じる:シート1=自動計算に戻す、ただしキャンセルした場合は手動計算モードを保持
現在のWorkbook_BeforeClose~の部分に何らかのコードを加えたら実現可能?
とも思いますが、そこが分からず行き詰っています…。
上記実現するために良い方法がありましたら、ご教示お願いいたします。
【This Wook Book】に記述しているコード-----------------------
Private Sub Workbook_Open()
'ブックを開くと手動計算にする
Application.Calculation = xlCalculationManual
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'ブックを閉じると自動計算に戻す
Application.Calculation = xlCalculationAutomatic
End Sub
-----------------------------------------------------
No.3ベストアンサー
- 回答日時:
こんな感じでどうでしょう?
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim ans As VbMsgBoxResult
If Not ThisWorkbook.Saved Then
' 保存されていない場合、ダイアログを出力する。
ans = MsgBox("'" & ThisWorkbook.Name & "'の変更を保存しますか?", _
vbExclamation + vbYesNoCancel + vbDefaultButton3)
Select Case ans
Case vbYes ' はいを選択した場合
Cancel = False
ThisWorkbook.Save ' ここでブックの保存を行う。
Case vbNo ' いいえを選択した場合
Cancel = False
ThisWorkbook.Saved = True ' 保存したことにする
Case vbCancel ' キャンセルを選択した場合
Cancel = True ' 閉じるのをキャンセルする。
End Select
Else
' 保存されていればそのままブックを閉じる
Cancel = False
End If
' ブックを閉じる事を選択した場合のみ自動計算モードにする。
If Not Cancel Then Application.Calculation = xlCalculationAutomatic
End Sub
VBAでエクセルの出す「保存しますか?」の問いに答えた結果を取得することは
できませんが、その問いの出力される条件はわかってますので、それに似た
ダイアログを自前で出力し、答えた結果に従って分岐させているだけです。
なお、マクロはブラウザでの見やすさ優先のため、行頭には全角のスペースを
使用しています。
以上
この回答への補足
お返事が大変遅くなり申し訳ありません。
教えて頂いた方法を検証したところ、ほぼ希望通りの結果になりました。
ただ、”擬似ダイアログ”をキャンセル→ブックを上書き保存→”本物ダイアログ”をキャンセル、とするとやはり自動計算に戻ってしまいました。
これはもうエクセルの仕様なのかな思います。
教えて頂いた方法を元に、もう試行錯誤してみます。
大変勉強になりましたどうもありがとうございました。
No.2
- 回答日時:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name = "Sheet1" Then
MsgBox "手動計算セット 適時F9を押せ"
Application.Calculation = xlCalculationManual
Else
Application.Calculation = xlCalculationAutomatic
End If
End Sub
十分テストして無いが、どうだろう。
この回答への補足
回答ありがとうございます。
教えて頂いたコードでテストしてみましたが、
他のシートに移動した際に再計算されてしまいました。
質問文の通りシート2~4にはシート1の元データが入っています。
元データは随時書き換えられます。
シート1はアクティブ・非アクティブに関わらず常に手動計算モードにしておき、
再計算するのはマクロ実行したときのみ、という形が理想なのですが…。
No.1
- 回答日時:
シートモジュールで対象シートを選択したときに「手動」にして、他のシートに移動したときに自動計算するのではダメでしょうか?
Private Sub Worksheet_Activate()
Application.Calculation = xlCalculationManual
End Sub
Private Sub Worksheet_Deactivate()
Application.Calculation = xlCalculationAutomatic
End Sub
この回答への補足
>シートモジュールで対象シートを選択したときに「手動」にして、他のシートに移動したときに自動計算するのではダメでしょうか?
回答ありがとうございます。
対象のシートはマクロ実行でのみ再計算させたいので、
他のシートに移動したときに再計算されては困るのです…。
(ブックを開いた時から閉じる時まで手動計算にしたいです)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
特定のシートのみ再計算させない方法は?
Excel(エクセル)
-
特定のシートだけ再計算させない
Excel(エクセル)
-
【エクセル】あるセルのみ自動再計算させない方法
Excel(エクセル)
-
-
4
エクセルファイルをオープンしたときの再計算について
Excel(エクセル)
-
5
エクセル関数 RAND関数で数字を固定させるには!?
その他(Microsoft Office)
-
6
エクセルでの自動計算と手動計算
Excel(エクセル)
-
7
Excelでセル参照したとき、書式も一緒に持ってくるには?
Windows Vista・XP
-
8
IF関数で空欄(")の時、Nullにしたい
その他(Microsoft Office)
-
9
エクセル ユーザーフォームにオートシェープ(図形)を貼り付けるこは可能なのでしょうか?
Excel(エクセル)
-
10
リストと一致する値のセルを塗りつぶしたい。
その他(Microsoft Office)
-
11
「自動」と言うのはどのタイミングで更新される?
Excel(エクセル)
-
12
Excelのテーブル上のセルの保護はどうすればいい?
Excel(エクセル)
-
13
条件付き書式で太罫線を引く方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
【マクロ】【画像あり】❶ブック...
-
Excelファイルをダブルクリック...
-
エクセルを共有するとPCによっ...
-
【マクロ】【画像あり】ファイ...
-
Excelでブックの共有を掛けると...
-
フォルダ内の複数ファイルから...
-
エクセルでウィンドウの枠固定...
-
エクセルで参照しているデータ...
-
Excel(2010)のフィルターが保...
-
WorkBooksをオープンさせずにシ...
-
ブックのピボットを別ブックに...
-
「ブックの共有」を有効にして...
-
指定ファィルの指定シートをシ...
-
参照したいブックのパス名に"["
-
VBA バックグラウンドで別ブッ...
-
Excelで複数ブックの同一セルに...
-
Excelの警告について
-
【マクロ】アクティブセルの時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】アクティブセルの時...
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
エクセルを共有するとPCによっ...
-
WorkBooksをオープンさせずにシ...
-
エクセルで参照しているデータ...
-
Excelファイルをダブルクリック...
-
Excelでブックの共有を掛けると...
-
「ブックの共有」を有効にして...
-
Excel(2010)のフィルターが保...
-
Excelの新しい空白のブックを開...
-
同じフォルダへのハイパーリン...
-
フォルダ内の複数ファイルから...
-
エクセルで別ブックをバックグ...
-
別ブックから入力規則でリスト...
-
ブックのピボットを別ブックに...
-
エクセルでウィンドウの枠固定...
-
エクセルにおける,「ブック」...
-
Excelで複数ブックの同一セルに...
-
Excelで指定範囲のデータ...
おすすめ情報