• 締切済み

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メソッドで再度印刷してしまう)

みんなの回答

回答No.3

ANo.1です。 よく見たら質問の回答とは違いました。 質問の中のプログラムに、リンク先の「プレビューのボタンを使用不可にする」のプログラムを組み込んで、 st.PrintPreview の部分を、 kEnablePreview st にすると、質問中のプログラムがそのままでいいみたいです。 と言う事です。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

余り自信ないが Sub test01() Dim a a = Application.Dialogs(xlDialogPrintPreview).Show MsgBox a End Sub を実行すると 閉じるをクリックー>FALSE 印刷したーー>TRUE が返る(になる)。 ただ印刷の終った後しか出てこないが。 これが使えないでしょうか。

回答No.1

googleで探してみたら、こんなのありましたが・・・ http://homepage2.nifty.com/kmado/ke_m9.htm E00M089(Excel2002) プレビューのボタンを使用不可にする Excel2000で試したらできました。

関連するQ&A

  • Excelダイアログボックスのボタン命令

    VBAの初心者です。 Excelでダイアログボックスを作りました。ボタンを押したとき、ワークシートの選択した範囲の印刷をさせたいと思っています。 ダイアログボックスのボタンに「ボタン2_Click」と名付けた下記のマクロを登録しました。 Sub ボタン2_Click() With DialogSheets(1) Sheets("Sheet1").Select Range("A3:G12").Select Selection.PrintOut Copies:=1, Collate:=True Range("A13:G18").Select Selection.PrintOut Copies:=1, Collate:=True Range("K18").Select End With End Sub 「ボタン2_Click」マクロは、直接実行すれば希望どおり印刷できます。 しかし、ダイアログボックスのボタンを押した場合には、Range("A3:G12").Selectまで実行しますが、そのあと次のメッセージが出て動きません。 実行時エラー'1004': Range クラスの PrintOut メソッドが失敗しました。 どう修正したらよいのか教えて下さい。よろしくお願いします。

  • エクセル ボタン マクロ 修正

    Sub 印刷() Dim a As Variant a = MsgBox("印刷しますか?", vbYesNo) If a = vbNo Then Exit Sub With Sheets("1") .Cells.FormatConditions.Delete .PageSetup.PrintArea = Range("A1:K73").Address .PrintOut End With End Sub として使用していたのですが シートをコピーして使用する事になり コピーした際印刷ができなくってしまうため修正したいのですが わからないため教えていただきたいです With Sheets("1")ここの部分を今現在ボタンを置いているシートを選択にしたいのです

  • Excel VBA ダイアログシートのボタン操作

    お世話になります。 宜しければ、お力をお貸し下さい。 現在、業務にて、ExcelのVBAをやっておりますが、VBAが初めてであること、ダイアログシートについての情報がインターネット等で少ない事から、作業が難航しております。 作業環境は、WindowsXP+Excel2003です。 ダイアログシートにて表示させたダイアログのボタンを押下した後に、押下したボタンを一時的に無効にしたいと考えております。 しかし、下記のようなソースを組みましたが、成功致しませんでした。 Sub Auto_Open()   ThisWorkbooks.Dialogsheets(シート名).Show() '…(1) End Sub Sub Button1_Click() 'ボタン押下時に呼ばれる   ThisWorkbooks.Dialogsheets(シート名).Buttons(ボタン名).Enabled = False '…(2)   '以下、処理が続く End Sub 簡単ではありますが、一部を抜き出しました。 上記を動かしても、ボタンが無効になりませんでした。 また、(2)を(1)の手前にすると、ボタンが無効になったのを確認致しましたので、構文自体は間違いではないと思うのですが… あと、自宅のPCにはExcelがなく、確認が出来ません。 確認が出来るのは、月曜日になってしまいますが、どうかお力をお貸し下さい。 宜しくお願い致します。

  • アクセスの印刷VBAを教えて下さい

    アクセス初心者です。 バージョンは2002を使っています。 ネットで探して詳しく分からないままプログラムしています。 フォームで印刷のコマンドボタンを作ってそのボタンをクリックすると表示されてる 1ページのみ印刷したいのですが全てのレコードが印刷されてしまいます。 どうすればいいのか教えて下さい。 下記が今現在のVBAです。 Private Sub 印刷_Click() Dim varCopies As Variant varCopies = InputBox("部数を数字で入力してください", "印刷部数の指定") If Len(varCopies) = 0 Then Exit Sub End If If IsNumeric(varCopies) = False Then MsgBox "部数は数字で入力してください", vbOKOnly + vbCritical, "入力エラー" Exit Sub ElseIf CLng(varCopies) = 0 Then MsgBox "部数は0以上で入力してください", vbOKOnly + vbCritical, "入力エラー" Exit Sub End If If MsgBox("印刷しますか?" & vbCrLf & "部数=" & varCopies _ , vbYesNo + vbInformation, "印刷の確認") = vbYes Then DoCmd.OpenForm "伝票", acPreview, , , acFormReadOnly DoCmd.PrintOut acPrintAll, , , , CLng(varCopies) DoCmd.Close acForm, "伝票" End If End Sub

  • 【VBA】コンパイルエラーについて

    Excelシートが5枚あり、 MsgBoxを使って、印刷したいシートの場合はOKボタンを押下し印刷します。 1枚目のシートが終わったら、2回目の MsgBoxがでて、印刷するかを判定します。 以下のような、VBAを記述したのですが、なぜかコンパイルエラーになってしまいます。 ※NEXTに対応するFORがありませんとエラー表示されます どこが誤りになるのか教えていただけると助かります。 お手数お掛けいたしますが、よろしくお願い致します。 ================================================================ Sub 必要なシートだけ印刷() Dim i As Long For i = 1 To 5 '←処理を5回繰り返す Worksheets("シフト表(" & i & ")").Select rc = MsgBox("印刷するシフト表を選択します。" & vbCrLf & "シフト表(" & i & ")""を印刷しますか?", vbYesNo + vbQuestion, "確認") 'もしyesを選択したら If rc = vbYes Then ActiveSheets.PrintOut '←印刷する Next i Exit Sub '←プロシージャから抜け出る End If End Sub ================================================================

  • 休暇願をVBA作成し両面印刷する方法を教えてほしい

    VBAで休暇願を作成し印刷時は差し込み印刷方法でA4用紙に両面印刷したいのですが書き方が判りません。 マクロの内容を添付しますので両面印刷できるようにするにはどのように書けばよいのか教えてください。 下記のマクロで片面印刷は可能です。 Sub 印刷() Dim LastRow As Long Dim i As Long Dim myNo As Long If vbNo = MsgBox("印刷を開始していいですか?", vbYesNo) Then Exit Sub With Worksheets("名簿マスター") LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row For i = 1 To LastRow myNo = .Range("A" & i).Value With Worksheets("印刷シート") .Range("f7").Value = myNo .PrintOut Copies:=1, Collate:=True End With Next i End With MsgBox "印刷が終わりました" End Sub

  • EXCEL VBA 印刷

    EXCEL VBA 印刷 初歩中の初歩で申し訳ありません・・・該当シート(Sheet1(名前は別名))の印刷をしたいと思い、ボタンの設定をしたのですが エラーとなります(画像を添付します。) お手数ですが、フォローの程宜しくお願いいたします。 参考までにコードも記載します。 Private Sub CommandButton9_Click() Range("A137").Select End Sub --------------------------上記はこんぼボックスで該当セルへジャンプしています。 Sub 印刷の実行() Worksheests("Sheet1").PrintOut 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 以上なんですがプレビュー後に”印刷しますが”が聞いてきません。 どうすればいいですか?

  • VBAで印刷処理の設定

    メインシートで、印刷ボタンを押した際に、 設定値に基づいて、条件分岐するには、どうすればいいでしょうか。 ご教授お願いいたします。 ★シート名 ・メインシート ・名簿 ・設定 の3つのシートがあります。 メインシートには、入力項目があります。 名簿には、 No. 会社名 担当 印刷 ・ ・ ・ のセルがあります。 印刷列は、 「0」or「1」の指定がされています。 0の場合は、印刷しない。 1の場合は、印刷する。 設定シートには、 項目 値 列があります。 項目1には、「プレビュー表示」があり、 値には、「プレビュー表示する」or「プレビュー表示しない」が 設定されます。 Sub 連続印刷() Dim i As Integer Dim LastRow As Integer Worksheets("メインシート").Select With Worksheets("名簿") LastRow = .Range("A65536").End(xlUp).Row For i = 2 To LastRow Range("A4").Value = .Range("A" & i).Value ' プレビュー表示分岐 With Worksheets("設定") ' Cells(行番号, 列番号) If Cells(2, 2).Value = "1" Then ' プレビュー確認 ActiveSheet.PrintPreview ElseIf Cells(2, 2).Value = "プレビュー表示しない" Then ' 確認なしで印刷 ActiveSheet.PrintOut Else ' プレビュー確認 ' ActiveSheet.PrintPreview MsgBox ("test") End If End With Next End With End Sub

  • 初心者です。エクセルVBAの質問なのですが・・・

    エクセルのVBAで 例えば・・・IF関数を使いたい時に Public Sub 練習() 年齢 = InputBox("あなたは何歳ですか。数字だけを入力して下さい。") If 年齢 < 20 Then MsgBox "未成年ですね" ElseIf 年齢 < 30 Then MsgBox "20代ですね。" Else MsgBox "その他の年代ですね" End If End Sub                            のようなものを作って、実行をしたときに、数字を入れてOKボタンではなく、ダイアログボックスのキャンセルや閉じるボタンを押したときに、「その他の年代ですね」が出てきますが、それを出てこないようにすることはできますか?(例えば、キャンセルボタンのような役割をさせるなど・・・)  結構難しいですかね? 教えて下さい。お願いします。

専門家に質問してみよう