• ベストアンサー

【Excel2007】印刷プレビューかどうかを判断したい

Excel2007を使用しています。 マクロで印刷プレビューかどうかを判断したいのですが、 どのようにプログラムしたら良いでしょうか? Wordであれば、以下のようにプログラムすれば判断できると思います。 If Application.PrintPreview = False Then Call MsgBox("印刷プレビューでありません。") End If 同じことをExcelでやりたいのですが もし方法をご存知でしたら教えてください。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.2

一応... Sub PreviewCheck()  If PrintPreview = False Then   MsgBox ("印刷プレビューでありません。")  End If End Sub 私のエクセルではエラーは出ませんでした バージョン違いのせいかもしれませんね(当方:EXCEL2000) PrintPreviewをウォッチリストで見ると Watch : : PrintPreview : Empty 値 : Variant/Empty : Module1.PreviewCheck と表示されます

rock123
質問者

お礼

Option Explicitは付けられましたか? 私にはPrintPreviewはプロパティではなく、 変数として扱われているように思えました。 ただそもそも印刷プレビュー中には マクロが動作しませんので、チェックする必要がなさそうですね。 ありがとうございました。

その他の回答 (1)

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.1

If PrintPreview = False Then  MsgBox("印刷プレビューでありません。") End If で、エラーは出ないようですが、プレビュー状態ではマクロが停止するので...どうなんでしょう?

rock123
質問者

お礼

ご回答ありがとうございます。 試してみました。 Option Explicit Sub PreviewCheck() If PrintPreview = False Then MsgBox ("印刷プレビューでありません。") End If End Sub すると「PrintPreview」に対して 「変数が定義されていません。」と表示されてしまいます。 PrintPreviewというプロパティはないように思われます。 Option Explicitを付けていないからだと思うのですが、 プログラムからはVariant型と判断されて、 一見正しい動作をしているように思います。 ただプレビュー中はマクロが動作しないのは、その通りですね。 そうなるとそもそもチェック不要なのかもしれませんね。

関連するQ&A

  • マクロで呼び出したプレビュー画面から印刷できない

    マクロで呼び出したプレビュー画面から印刷できない エクセル2010です。 下記のマクロで呼び出したプレビュー画面から印刷できません。 Sub test()   ActiveSheet.PrintPreview End Sub で呼び出したプレビュー画面から、印刷するために一番左上の「印刷」をクリックすると 実行時エラー1004 WorksheetクラスのPrintPreviewメソッドが失敗しました。 となってしまいます。 何がわるいのでしょうか?別のパソコンのエクセル2016では問題なく印刷できます。 頭をかかえています。

  • プロシージャが実行されたかの有無の判断

    Sub test() ・・・・・ IF ・・・・ then Call マクロ1 End If ・・・・・ ・・・・・ If testと言う名のプロシージャーの中でマクロ1と言うプロシージャーが実行されたなら Then MsgBox "マクロ1は実行されました" End If End Sub ということを実行したいのですがどうすればいいのでしょうか? マクロ1の実行条件自体が複雑でIf ~Thenの中に書ききれないので 実行の有無を値で返したりすることは不可能でしょうか? よろしくお願い致します。

  • ブックの中の1枚だけ選んで印刷したい

    win7とExcel2007でマクロ作成中の初心者です。 以下、ファイルの中の複数シートを印刷できました。 Private Sub 請求書印刷_Click() Application.ScreenUpdating = False Unload Me 請求書の印刷100 '請求書印刷 Worksheets(1).Select ActiveWindow.DisplayHorizontalScrollBar = False End Sub Sub 請求書の印刷100() ' Dim i As Integer For i = 1 To Worksheets.Count - 8 With Worksheets(i) If .Range("F11").Value <> 0 Then .PageSetup.PrintArea = "$B$1:$U$44" .PrintOut End If End With Next i Worksheets(1).Activate End Sub ------------------------------------ 今度は、同一のファイルから、指定の単一のシートを印刷したいので 以下のコードを実行すると、 Private Sub 単数印刷_Click()' Application.ScreenUpdating = False Unload Me Unload G印刷 Dim i As Integer With 名簿リスト2 For i = 0 To .ListCount - 1 If .Selected(i) Then 請求書の印刷範囲200 ' Worksheets(.list(.ListIndex)).PrintPreview Worksheets(Split(.list(.ListIndex - 0), " ")(1)).PrintPreview ' End If Next i End With ActiveWindow.DisplayHorizontalScrollBar = False GH印刷.Show End Sub Sub 請求書の印刷範囲200() ' ActiveSheet.Unprotect Dim i As Integer For i = 1 To Worksheets.Count - 8 With Worksheets(i) .PageSetup.PrintArea = False '印刷範囲のクリア If .Range("F11").Value <> 0 Then .PageSetup.PrintArea = "$B$1:$T$44" End If End With Next i Worksheets(1).Activate End Sub 以下の行が黄色くなりマクロがエラーとなり停止します。 エラーは 実行時エラー9 インデックスが有効範囲にありません となります。 Worksheets(Split(.list(.ListIndex - 0), " ")(1)).PrintPreview ' これと同様のファイルで試すと何なく1枚だけ印刷できました。 このエラーの原因はなんでしょうか?解決方法を教えてください。

  • EXCEL VBA 印刷プレビューダイアログのボタン操作を判定したい

    EXCEL VBAでシートの印刷アプリを作っています。 印刷前にプレビューを見せたいので印刷プレビューダイアログを呼び出していますが、 印刷プレビュー後、実際に印刷に移る前に、ユーザ向けメッセージを出したいのです。 印刷プレビュー画面には「印刷」と「閉じる」ボタンがありますが 「印刷ボタン」を押した場合はVBA側でこう処理、 「閉じるボタン」を押した場合はこう処理 とVBA側で判定することは可能でしょうか。 ご指導お願いします。 参照用コード(思った通りに動作していませんが・・・・) Private Sub Print_Sheet() Dim i As Integer Dim st As Worksheet Set st = Worksheets("印刷シート") i = MsgBox("印刷前にプレビューを表示しますか?", vbYesNo, "シート印刷") If i = 6 Then st.PrintPreview End If i = MsgBox("印刷を開始しますか?" & vbCr & vbLf & "印刷する場合は、プリンターの確認をしてください", _ vbYesNo, "シート印刷") If i <> 6 Then Exit Sub Else st.PrintOut End If Set st = Nothing End Sub 上記のコードだと、印刷プレビューダイアログにおいて、 「閉じる」ボタンを押した場合はそのまま再度MsgBoxで印刷するか否かを聞きに行くので良いのですが 「印刷」ボタンを押した場合は印刷プレビューダイアログから印刷ダイアログが呼ばれそのまま印刷ができてしまいます。 (で、下のフローに流れてPrintOutメソッドで再度印刷してしまう)

  • 印刷プレビュー表示後ユーザーフォームが閉じません。

     下記のコードで印刷プレビューが表示された後,UserForm3が閉じるようにしてありましたができなくなりました。プレビューの閉じるボタンをクリックするとUserForm3一緒に閉じます。解決策がありましたらお願いします。勉強不足でわかりませんので。 Sub 印刷範囲() Application.ScreenUpdating = False Dim ret As Integer ret = MsgBox("印刷範囲を、" & ActiveSheet.Range("B59").Value & "勤務表上に" _ & "表示します。  よろしいですか?", _ vbOKCancel + vbQuestion, "メイン処理") Select Case ret Case vbOK UserForm3.Show vbModeless UserForm3.Repaint With Worksheets("メイン") .PageSetup.CenterHorizontally = True .PageSetup.CenterVertically = True .PrintPreview End With Unload UserForm3 End Select Application.ScreenUpdating = True End Sub

  • VBAエクセルにて印刷

    こんにちわ。教えてください。VBAでActiveXコントロールをクリック したのち、印刷のプレビューを表示したら、MegBoxメッセージを表示 させ ”はい””いいえ”を選択したいのですがうまくいきません。 ちなみに下記のプログラムです。 Private Sub 印刷_Click() ActiveWindow.SelectedSheets.PrintPreview Dim ans As Integer ans = MsgBox("印刷しますか?", vbInformation + vbYesNo, "確 認") Select Case ans Case vbYes Application.ActivePrinter = "Canon iR C3080/C3580 LIPSLX on Ne05:" ExecuteExcel4Macro "PRINT(2,1,1,1,,,,,,,,2,,,TRUE,,FALSE)" Case vbNo MsgBox "故障履歴印刷をキャンセルします。" End Select End Sub 以上なんですがプレビュー後に”印刷しますが”が聞いてきません。 どうすればいいですか?

  • Excelのマクロで印刷設定をすると遅くなる

    Excelのマクロについて 久しぶりに質問させていただきます。 マクロで印刷の設定をすると 遅くなるのでしょうか? Range("A1:Z10").Select With ActiveSheet.PageSetup  .Orientation = xlLandscape  .Zoom = False  .FitToPagesWide = 1  .FitToPagesTall = 1  .TopMargin = Application.CentimetersToPoints(1)  .BottomMargin = Application.CentimetersToPoints(1)  .LeftMargin = Application.CentimetersToPoints(1)  .RightMargin = Application.CentimetersToPoints(1) End With Selection.PrintPreview というようなマクロを作って実行すると プレビュー画面が出るまでに かなり時間がかかるのです。 職場のパソコンであるため パソコンそのものがかなり古いのですが マクロを使わずに直接、印刷の設定をすれば すぐにプレビューが表示されます。 ただ、同じシートをいろいろな方法で印刷する必要があるため マクロを組んでみたわけです。 ちょっと我慢すればいいだけで 仕事そのものに大きく影響するわけではありませんが 皆様のご助言をよろしくお願いいたします。

  • エクセルのInputBoxについて教えてください。

    エクセル2010です。 InputBoxについて教えてください。  負数以外の数値を受け取りたいのです。 以下のようにやってみました。 Sub test001() Dim ans As Double ans = Application.InputBox("数値を入力", Type:=1) If ans = False Then MsgBox "キャンセル" Exit Sub ElseIf ans < 0 Then MsgBox "負数は不可。" Call test Else MsgBox ans & "を受け取りました。" End If End Sub 一応、これで動くのですが、問題は数値0を入力された場合です。 0はFalseと認識されるようで、キャンセルとなってしまいます。0は0という数値で受け取りたいのです。 試行錯誤の結果、Type:=1をやめ、変数ansをVariantにして If ans = “False” Then と、Falseをダブルクォーテーションでくくると、0を数値としてくれるようです。でも理屈がわかりません。変数ansにキャンセルボタンで帰ってくるのはBooleanのFalseであり、Stringの”False”ではないと思うのですが。 Sub test002() Dim ans ans = Application.InputBox("数値を入力") If ans = "False" Then MsgBox "キャンセル" & TypeName(ans) Exit Sub ElseIf ans = "" Then MsgBox "未入力" & TypeName(ans) Call test002 ElseIf Not IsNumeric(ans) Then MsgBox "数値ではありません。" & TypeName(ans) Call test002 ElseIf ans < 0 Then MsgBox "負数は不可。" & TypeName(ans) Call test002 Else MsgBox ans & "を受け取りました。" & TypeName(ans) End If End Sub あと、もうひとつ質問は、数値以外の入力があった場合、再度入力させるためいちいちCall test002 を入れてますが、このやり方でただしいのでしょうか?

  • EXCEL2010から外部DLLをCall出来ない

    下記のごときマクロをEXCELマクロに記入し、動かすとExcel2003では問題なく動くのですが、 Windows7+Excel2010の評価版を新規インストールした環境では「Call testDll」の文のところで 「実行時エラー48 ファイルが見つかりませんC:\Temp\testDll.dll」と出てしまうのです。  しかし、C:\Temp\testDll.dllは置いてあるのです。  Declare文の仕様が変わっているのでしょうか?  どこに問題があるのでしょうか? 一応、マクロのセキュリティでc:\temp\は信頼できる場所にはして見たのですが変わりませんでした。 Declare Sub testDll Lib "C:\Temp\testDll.dll" () Sub Macro1() ' Cells.Select Selection.Copy Workbooks.Add Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False ChDir "C:\temp" Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="C:\temp\testDATA.csv", FileFormat:=xlCSV, _ CreateBackup:=False ActiveWindow.Close Range("A1").Select Application.DisplayAlerts = True Call testDll '計算結果の読込み sdname = "C:\temp\testMES.csv" myfile = Dir(sdname) 'ファイルが存在しなければ空白 If myfile = "" Then '存在しない場合は MsgBox ("エラー発生") 'メッセージを表示 Else Workbooks.Open Filename:=sdname '存在する場合は開ける MsgBox ("正常終了") 'メッセージを表示 End If End Sub

  • ブラウザ上でEXCELの印刷プレビューをする方法は?

    通常、エクセルで「印刷プレビュー」をする場合、ツールバーの「印刷プレビュー」を選択するか、VBAマクロで"ActiveSheet.PrintPreview"を組み込んでも行うことができますが、ブラウザ上で開いたエクセルの印刷プレビューを行う方法を教えて下さい。

専門家に質問してみよう