印刷プレビューでUserForm3が閉じない

このQ&Aのポイント
  • 下記のコードで印刷プレビューが表示された後、UserForm3が閉じなくなりました。
  • プレビューの閉じるボタンをクリックするとUserForm3も一緒に閉じるようにしてください。
  • 解決策があれば教えてください。
回答を見る
  • ベストアンサー

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

 下記のコードで印刷プレビューが表示された後,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

  • Rord
  • お礼率67% (25/37)

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

  • ベストアンサー
  • queuerev2
  • ベストアンサー率78% (96/122)
回答No.2

質問者様のコードと補足を見比べ、さらにExcel2003で動作させてみましたが、コードの動作はまさしく今のご希望に合わないものでしかありません。 以前は今とは異なるご希望に添った動作だったとのことですが、おそらくコードそのものが提示いただいた今のものと異なっていたのではないでしょうか。 (もしかするとUserForm3のプロパティを変更すればいいのかもしれませんが、申し訳ありませんが私はこのあたりがあまりよくわからないので、オブジェクト名とCaption以外は規定値で使っています) 動作を簡単に説明します。 MsgBoxのOKをクリックすると、UserForm3.Show vbModelessでUserForm3が表示されます。 UserForm3の表示にはvbModelessを指定しているので、フォームが表示されたまま直ちに次の印刷プレビューに行きます。 このとき、ユーザーフォームは色が薄くなって操作できないまま最前面に居座るのですね。これは動作させて初めて知りました。 で、印刷プレビューを閉じると次のUnload UserForm3でUserForm3が消滅します。 ご希望の動作とするには、.PrintPreviewを実行する前にUnload UserForm3あるいはUserform3.Hideを実行すればいいと思います。 ただし、質問文中に提示いただいたコードではUserForm3の表示の直後に印刷プレビューを行っていますので、UserForm3は一瞬だけ表示されてすぐ消えることになります。 おそらく質問者様が実際に使用されているコードでは、UserForm3.Show vbModelessと.PrintPreviewの間に何かユーザーフォームを用いた処理を行っているのではないでしょうか。そうであればこのコードで一瞬だけ表示されてすぐ消えることについては問題ありません。

Rord
質問者

お礼

 ご丁寧にありがとうございます。 確かにPrintPreviewを実行する前にUnload UserForm3を実行するようにコードを変更したら事なきを得ました。まだまだあれこれ勉強不足ですいません。人に教えを請うのも勉強の1つかと思います。

その他の回答 (1)

  • queuerev2
  • ベストアンサー率78% (96/122)
回答No.1

申し訳ありませんが状況が今ひとつ理解できませんのでもうちょっと説明いただけないでしょうか。 質問文中のコードで、以前は印刷プレビューを手動で閉じるとUserForm3が自動的に閉じたが、今は印刷プレビューを手動で閉じてもUserForm3が閉じずに開いたまま、ということでしょうか?

Rord
質問者

補足

 シートにボタンを作成してあり以前はクリックすると印刷プレビューが表示されるとUserForm3は自動で閉じましたが、今は、印刷プレビューが表示サれてもUserForm3は閉じず表示されたままになり表示サれているプレビューの閉じるボタンをクリックすると一緒に閉じる状況です。言葉足らずで申し訳ありません。

関連するQ&A

  • エクセルのマクロについて

    エクセルの印刷マクロを作りましたが、動作が非常に遅いのです。 スタッフ用と管理者用のマクロを作り、スタッフ用が遅いのです。 余計なものが含まれているのでしょうか? お願いします。 Sub スタッフ() ' スタッフ Macro   ActiveSheet.PageSetup.PrintArea = "$A$1:$AJ$55" With ActiveSheet.PageSetup .PrintTitleRows = "" .PrintTitleColumns = "" End With ActiveSheet.PageSetup.PrintArea = "$A$1:$AJ$55" With ActiveSheet.PageSetup .LeftHeader = "" .CenterHeader = "" .RightHeader = "" .LeftFooter = "" .CenterFooter = "" .RightFooter = "" .LeftMargin = Application.InchesToPoints(0) .RightMargin = Application.InchesToPoints(0) .TopMargin = Application.InchesToPoints(0) .BottomMargin = Application.InchesToPoints(0) .HeaderMargin = Application.InchesToPoints(0) .FooterMargin = Application.InchesToPoints(0) .PrintHeadings = False .PrintGridlines = False .PrintComments = xlPrintNoComments .CenterHorizontally = True .CenterVertically = True .Orientation = xlLandscape .Draft = False .PaperSize = xlPaperA4 .FirstPageNumber = xlAutomatic .Order = xlDownThenOver .BlackAndWhite = False .Zoom = 76 .PrintErrors = xlPrintErrorsDisplayed End With ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveSheet.PageSetup.PrintArea = "$A$1:$AJ$60" With ActiveSheet.PageSetup .PrintTitleRows = "" .PrintTitleColumns = "" End With ActiveSheet.PageSetup.PrintArea = "$A$1:$AJ$60" With ActiveSheet.PageSetup .LeftHeader = "" .CenterHeader = "" .RightHeader = "" .LeftFooter = "" .CenterFooter = "" .RightFooter = "" .LeftMargin = Application.InchesToPoints(0) .RightMargin = Application.InchesToPoints(0) .TopMargin = Application.InchesToPoints(0) .BottomMargin = Application.InchesToPoints(0) .HeaderMargin = Application.InchesToPoints(0) .FooterMargin = Application.InchesToPoints(0) .PrintHeadings = False .PrintGridlines = False .PrintComments = xlPrintNoComments .CenterHorizontally = True .CenterVertically = True .Orientation = xlLandscape .Draft = False .PaperSize = xlPaperA4 .FirstPageNumber = xlAutomatic .Order = xlDownThenOver .BlackAndWhite = False .Zoom = 70 .PrintErrors = xlPrintErrorsDisplayed End With Range("A1").Select End Sub

  • エクセル マクロで教えてください

    下記のマクロがうまく働きません SUB印刷01は単独ではいくのですが、繰返しをするとプレビューの行で止まります。SHEETオブジェクトがおかしいというのですが私には分かりません宜しくお願いします Sub 印刷01() With ActiveSheet.PageSetup .PrintQuality = 600 .CenterHorizontally = True .CenterVertically = False .Orientation = xlLandscape .Draft = False .PaperSize = xlPaperA4 .FirstPageNumber = xlAutomatic .Order = xlDownThenOver .BlackAndWhite = False .Zoom = 47 .PrintErrors = xlPrintErrorsDisplayed End With ActiveWindow.SelectedSheets.PrintPreview ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True End Sub Sub 印刷繰返し() Dim WS As Object For Each WS In Sheets WS.Activate Call 印刷01 Next End Sub

  • ExcelVBAの改ページの区切り位置が変更不可

    下記のようなコードで印刷プレビューを出して印刷するようにしたいのですが、改ページの位置が思い通りに変更されません。 3ページに印刷で、A19(B19)の行から2ページ目とA37(B37)の行から3ページ目にしたいのですが、印刷プレビューを見るとA20の行から2ページ目でA38の行から3ページ目になってしまいます。 HPageBreaks.Add Before:=Range("A19")←ここを色々違うセルに変えたり別のコードにかえたりしても、まったく反映されません。何かが邪魔をしているのでしょうか? どうしたら、任意の位置で改ページできるでしょうか?お願いいたします。 Sub 印刷プレビュー設定() Dim s As Worksheet Set s = ThisWorkbook.ActiveSheet With s '列非表示 .Columns("I:I").Select Selection.EntireColumn.Hidden = True 'ワークシートを選択、印刷範囲指定する .Select ActiveSheet.PageSetup.PrintArea = "$B$1:$O$54" '余白設定 .PageSetup.TopMargin = 0 .PageSetup.BottomMargin = 0 .PageSetup.LeftMargin = 0 .PageSetup.RightMargin = 0 '水平位置の中央へ .PageSetup.CenterHorizontally = True '垂直位置の中央へ .PageSetup.CenterVertically = True '用紙を横向きに設定 .PageSetup.Orientation = xlLandscape '用紙サイズを設定 .PageSetup.PaperSize = xlPaperA4 '印刷範囲を指定ページに収めて印刷プレビューを表示する .PageSetup.Zoom = False '拡大縮小倍率をFitToPagesの設定に収める .PageSetup.FitToPagesTall = 3 '縦の枚数 .PageSetup.FitToPagesWide = 1 '横の枚数 ActiveSheet.HPageBreaks.Add Before:=Range("A19") ActiveSheet.HPageBreaks.Add Before:=Range("A37") .PrintPreview End With 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で印刷範囲指定

    マクロの記録で印刷範囲の指定を考えています。 以下のマクロを記録しました。 Sub 印刷範囲指定() Cells.Select With Selection.Font .Name = "MS Pゴシック" .Size = 9 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With Range("A1").Select With ActiveSheet.PageSetup .PrintTitleRows = "$6:$8" .PrintTitleColumns = "" End With ActiveSheet.PageSetup.PrintArea = "" With ActiveSheet.PageSetup .LeftHeader = "" .CenterHeader = "&A" .RightHeader = "" .LeftFooter = "" .CenterFooter = "&P / &N ページ" .RightFooter = "" .LeftMargin = Application.InchesToPoints(0.78740157480315) .RightMargin = Application.InchesToPoints(0.78740157480315) .TopMargin = Application.InchesToPoints(0.984251968503937) .BottomMargin = Application.InchesToPoints(0.984251968503937) .HeaderMargin = Application.InchesToPoints(0.511811023622047) .FooterMargin = Application.InchesToPoints(0.511811023622047) .PrintHeadings = False .PrintGridlines = False .PrintComments = xlPrintNoComments .PrintQuality = 600 .CenterHorizontally = False .CenterVertically = False .Orientation = xlLandscape .Draft = False .PaperSize = xlPaperA4 .FirstPageNumber = xlAutomatic .Order = xlDownThenOver .BlackAndWhite = False .Zoom = 100 End With ActiveWindow.View = xlPageBreakPreview ActiveWindow.LargeScroll ToRight:=1 ActiveSheet.PageSetup.PrintArea = "$A$1:$I$50" ActiveWindow.View = xlNormalView Columns("B:I").Select Columns("B:I").EntireColumn.AutoFit Range("A1").Select End Sub やりたいことは ・まず最初にcsvファイルをxlsファイルに取り込む機能をつけたい。 ・取り込んだcsvをシートの一番最後につける。 そのファイルを以下のように設定していきたいです。 ・列の印刷範囲を数ある列のうちA列からI列までとする。 ・行の印刷範囲をA列の最終行までとしたい。 上記マクロでここを修正すればいいというところがあれば教えてください。。

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

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

  • 印刷ダイアログを表示させない方法

    いつもお世話になっております。 ExcelのVBAで印刷ダイアログを表示させないようにするにはどのようなプロパティを設定すればよいでしょうか。 以下のようなコードを作成しました。 Sub ファイルの印刷() Dim trgFolder As String Dim buf As String Dim sht As Worksheet Application.ScreenUpdating = False Application.DisplayAlerts = False trgFolder = _ "C:\Documents and Settings\Name\My Documents\ファイル\" buf = Dir(trgFolder & "*.xls") Do While buf <> "" Workbooks.Open trgFolder & buf For Each sh In Worksheets With ActiveSheet .PageSetup.Zoom = 80 .PrintOut End With Next Workbooks(buf).Close buf = Dir() Loop Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub "ファイル"フォルダの各Excelファイルのすべてのシートを印刷するためのマクロです。 よろしくお願いします。

  • VBAで印刷する前にプリンターの設定を変更する方法

    ○シート1の印刷ボタンで印刷するとシート1及びシート2が印刷されます。  シート2だけを印刷するには、どうしたらよいのですか。   ○現状  ・シート2は非表示  ・シート1に印刷ボタン(下記のVBAをマクロ登録済) ---------------------------------------------------------------------- Sub printappointedrange() Dim ws As Worksheet 'ワークシート Dim PrintFlg As Boolean '印刷するかの判定 On Error GoTo ErrorHandler 'エラー対応(非表示シート対応) Application.Dialogs(xlDialogPrint).Show 'プリンタ設定 Application.ScreenUpdating = False '画面更新ストップ For Each ws In Worksheets '全てのシートを調べる With ws Select Case .Name Case "シート2" .PageSetup.PrintArea = "A1:AB42" '印刷範囲の指定 .PrintOut '印刷 .PageSetup.PrintArea = "" '印刷範囲クリア End Select End With Next Exit Sub '終わり ErrorHandler: 'シートが非表示の場合 If Err = 1004 Then ws.Visible = True '表示する ws.PrintOut ws.Visible = False '非表示に戻す End If Resume Next '次の処理 End Sub --------------------------------------------------------------------

  • ユーザフォームのリストボックス

    お世話になります。 ユーザフォームのリストボックス内の下記2個のどちらかを選択し Private Sub UserForm_Initialize() ListBox1.AddItem ("印刷プレビュー") ListBox1.AddItem ("印刷") End Sub CommandButton1をクリックして Worksheets("Sheet1").PrintOut か Worksheets("Sheet1").PrintPreview を実行したいのですが どうやってリストボックスとコマンドボタンを 連動できるようにすればいいのでしょうか コマンドボタンのみだったら出来るのですが、 リストボックスを使うとうまくいきません。 ご教授よろしくお願いいたします。

  • 処理終了後のに砂時計が、クリックしないと矢印に

     高速処理ができるようにしたのはいいのですが、マウスポインタの砂時計がクリックしないと矢印に戻りません。自分のパソコンでは、クリックしないで戻るのですが。会社のパソコンだとできません。スッペクの良し悪しなのか、スペックに関係なくクリックしないで矢印に戻る解決方法があればお願いします。(コードは下記です。) Windows7 Office2010 Private Sub 定義の書込_Click() Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Dim ret As Integer ret = MsgBox("メインシートのデータを、" & ActiveSheet.Range("C54").Value & "の勤務表に" _ & "書き込みます。 よろしいですか?", _ vbOKCancel + vbQuestion, "メイン・2") Select Case ret Case vbOK UserForm2.Show vbModeless UserForm2.Repaint Dim i As Integer Dim j As Integer For i = 1 To 16 For j = 1 To 31 Dim addrname_workpattern As String addrname_workpattern = "" With Worksheets("メイン") Select Case .Cells(9 + (i - 1) * 2, 10 + (j - 1) * 3).Value Case 1: addrname_workpattern = "勤務1" Case 2: addrname_workpattern = "勤務2" Case 3: addrname_workpattern = "勤務3" Case 4: addrname_workpattern = "日勤1" Case 5: addrname_workpattern = "日勤2" Case 6: addrname_workpattern = "日勤3" Case Else Select Case .Cells(10 + (i - 1) * 2, 9 + (j - 1) * 3).Value Case 1: addrname_workpattern = "日勤4" Case Else Select Case .Cells(9 + (i - 1) * 2, 9 + (j - 1) * 3).Value Case 2: addrname_workpattern = "明け" Case 3: addrname_workpattern = "日勤" Case 4: addrname_workpattern = "夜勤" Case 5: addrname_workpattern = "公" Case 6: addrname_workpattern = "有" Case 7: addrname_workpattern = "特" Case 8: addrname_workpattern = "振" Case 9: addrname_workpattern = "欠" End Select End Select End Select End With If addrname_workpattern <> "" Then ActiveSheet.Range(addrname_workpattern).Copy Cells(7 + i, 5 + (j - 1) * 3).PasteSpecial Application.CutCopyMode = False End If Next Next Unload UserForm2 Range("E10:CS10").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("E34:CS34").Select Selection.Delete Shift:=xlUp Macro9 Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End Select End Sub

専門家に質問してみよう