エクセル2003です。
ThisWorkbookには以下の記述があります。
Private Sub Workbook_BeforePrint(Cancel As Boolean)
If ActiveSheet.Name <> "Sheet1" Then Exit Sub
If Range("A1").Value = "" Then
MsgBox "A1が未入力です"
Range("A1").Select
Cancel = True
End If
Application.OnTime Now(), "ページ移動"
End Sub
標準モジュールには以下の記述があります。
Sub ページ移動()
Sheets("Sheet2").Select
Range("A1").Select
End Sub
Sub プリント()
ActiveWindow.SelectedSheets.PrintPreview
End Sub
これでSheet1を開いた状態でツールバーから印刷プレビュー指示をすると、A1セルが入力済みであればプレビュー画面を出し、プレビューを閉じればSheet2が表示されます。
ところが、同じ状態でツールバーからではなく、マクロ Sub プリント を実行すると、プレビュー画面にはなりますが、プレビューを閉じてもSheet1のままです。
なぜ、
Application.OnTime Now(), "ページ移動"
が、有効にならないのでしょうか?
No.1ベストアンサー
- 回答日時:
>なぜ、
>Application.OnTime Now(), "ページ移動"
>が、有効にならないのでしょうか?
結論から言うと、『仕様です』という事になります。
イベントプロシージャは手動操作をトリガーにして実行されますが、
他マクロからのネストでイベントが発生する時、
ある種のメソッドが無視されるように作られているようです。
『ある種の..ようです』と書いてるのは、
全容を網羅したドキュメントを見た事がないからです。
個別にはMSsupportで紹介されているものが幾つかあります。
http://support.microsoft.com/kb/294810/ja
http://support.microsoft.com/kb/898511/ja
他にはBeforeCloseイベント内でProtectメソッドが利かないとか、
BeforeSaveイベント内でOnTimeメソッドが利かないとか、
同じくBeforeSaveイベント内でAutoFilter操作が利かないとか、
Excel系のQ&A掲示板で経験した事があります。
特にWorkbookイベントにその傾向がありますね。
今回の事例では
1:Sub プリント()開始
2: Workbook_BeforePrint開始
3: OnTimeメソッド発行
4: Workbook_BeforePrint終了
5: PrintPreview
6:Sub プリント()終了
こういうネスト状態です。
手動では1と6がありませんから
OnTimeメソッドで発行されたSub ページ移動()が
5の終了時に実行されるわけですが
上記ネスト状態だと5の終了後は、
まだSub プリント()の制御内にあります。
マクロから呼び出されたイベント内で
全てのメソッドを許してしまうと何らかの不具合が出るため(?)
その対策としての仕様かもしれません。
実際、マクロを書いてWorkbook_BeforePrintを呼び出しているのだから
そのマクロ内にOnTimeメソッドの内容を書けば良いですよね、
という事なのかもしれません。
これ以上の詳細はMicrosoftに訊いてみるしかないかも。
現実的な対応としては
Sub プリント()
ActiveWindow.SelectedSheets.PrintPreview
ページ移動
End Sub
とするか、
Sub プリント()
Application.CommandBars.FindControl(ID:=109).Execute
End Sub
など。
ありがとうございます。
そういう『仕様』ならしようがないですね。(笑)
> 実際、マクロを書いてWorkbook_BeforePrintを呼び出しているのだから
> そのマクロ内にOnTimeメソッドの内容を書けば良いですよね
そのように対応しているのですが、二度手間だなと思って質問しました。
有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Visual Basic(VBA) エクセルで、1つのセルで上書き足し算して セルの範囲を指定できますか? パソコン初心者です。 お時間 3 2023/07/05 06:13
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- Excel(エクセル) vba userformで漢字を全角カタカナに 2 2022/07/24 15:38
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
JSPで<SELECT>の中にDBから持っ...
-
onClickで関数呼出し後に、結果...
-
mainメソッドのthrows節で設定...
-
final修飾子を使っているのに、...
-
Labelコントロールに数字を代入...
-
Refreshメソッドの使い方
-
DataGridViewでセルクリックイ...
-
コマンドプロンプト実行後に画...
-
エクセルVBAにおけるON TIMEメ...
-
プログラミング Java
-
worksheets & rows メソッドは...
-
クエリ文字列の"?"の後を非表示...
-
JAVA コンパイル時のエラー
-
C# 演算 最大値 最小値 表現の仕方
-
boolean型のフィールドとゲッタ...
-
DBを扱う上でのclose()メソッド...
-
エクセルのマクロでプリンタを...
-
VBScriptからストアドプロシー...
-
フォントサイズ(C# or VB)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
Labelコントロールに数字を代入...
-
final修飾子を使っているのに、...
-
エクセルVBAにおけるON TIMEメ...
-
コマンドプロンプト実行後に画...
-
mainメソッドのthrows節で設定...
-
DataGridViewでセルクリックイ...
-
javascriptからjavaを呼び出したい
-
VBPをダブルクリックするとたま...
-
onClickで関数呼出し後に、結果...
-
ExcelのxlDialogInsertPictureで。
-
Refreshメソッドの使い方
-
JSPで<SELECT>の中にDBから持っ...
-
【sendkeysメソッドが動かずに...
-
ウィンドウを最前面にできません
-
(String args[])というメッソ...
-
C# 演算 最大値 最小値 表現の仕方
-
Excel VBA シェイプの原型のサ...
-
VB.netで、シリアル通信のタイ...
-
Excel VBA でExcelを終了したい...
おすすめ情報