こんにちは。
エクセルの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も見ています
-
【お題】大変な警告
【大喜利】「今このパソコンは大変危険な状態です」という警告メッセージを無視してパソコンを開いたら、こんなことが起こった
-
歳とったな〜〜と思ったことは?
歳とったな〜〜〜、老いたな〜〜と思った具体的な瞬間はありますか?
-
モテ期を経験した方いらっしゃいますか?
一生に一度はモテ期があるといいますが、みなさんどうですか? いまがそう! という方も、「思い返せばこの頃だったなぁ」という方も、よかったら教えて下さい。
-
テレビやラジオに出たことがある人、いますか?
テレビやラジオに取材されたり、ゲスト出演したことある方いますか?
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
特定のシートのみ再計算させない方法は?
Excel(エクセル)
-
特定のシートだけ再計算させない
Excel(エクセル)
-
【エクセル】あるセルのみ自動再計算させない方法
Excel(エクセル)
-
-
4
エクセルファイルをオープンしたときの再計算について
Excel(エクセル)
-
5
エクセル関数 RAND関数で数字を固定させるには!?
その他(Microsoft Office)
-
6
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
7
エクセルのフィルターを複数シートに連動させたいです。 エクセルファイルに15シートあります。 そのう
Excel(エクセル)
-
8
エクセルでの自動計算と手動計算
Excel(エクセル)
-
9
エクセルの質問です。条件によってセルに斜線を引きたいのですが。
その他(OS)
-
10
Excel 行の連続データを列に参照したいんです・・・
Excel(エクセル)
-
11
複数の文字列のいずれかが含まれていたらTRUEを返す関数について
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの警告について
-
エクセルの関数 ENTERを押...
-
エクセルを共有するとPCによっ...
-
VBAでブックを非表示で開いて処...
-
Excelファイルをダブルクリック...
-
エクセルファイルをオープンし...
-
Excel(2010)のフィルターが保...
-
エクセルファイルを開かずにpdf...
-
複数ファイルから特定シートの...
-
Excelでブックの共有を掛けると...
-
WorkBooksをオープンさせずにシ...
-
Excelで複数ブックの同一セルに...
-
ブックの保護ができないんです...
-
エクセルで参照しているデータ...
-
エクセルにおける,「ブック」...
-
エクセルシートの一部を送りたい
-
Excel起動時に特定のワークシー...
-
エクセル 複数のブックを一度...
-
VBA: ブックをアクティベイトで...
-
エクセルで50行ごとに区切った...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの警告について
-
エクセルを共有するとPCによっ...
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
Excelファイルをダブルクリック...
-
WorkBooksをオープンさせずにシ...
-
エクセルファイルを開かずにpdf...
-
Excelでブックの共有を掛けると...
-
Excelで複数ブックの同一セルに...
-
エクセルで参照しているデータ...
-
同じフォルダへのハイパーリン...
-
Excel(2010)のフィルターが保...
-
フォルダ内の複数ファイルから...
-
印刷しようとすると強制終了に...
-
ブックのピボットを別ブックに...
-
フォルダ内の複数ファイルから...
-
エクセルで「ディスクがいっぱ...
-
エクセルでウィンドウの枠固定...
-
エクセルファイルをオープンし...
-
エクセルにおける,「ブック」...
おすすめ情報