• 締切済み

Excel VBAのPrintOutメソッドにつきまして

毎々お世話になります。 ExcelのVBAにてシート編集→印刷を実施しておりますが、印刷が行えない事象が発生しております。(100%ではありません。) ----------------------------------------------- ExlObj.ActiveSheet.PrintOut '印刷開始 ExlObj.DisplayAlerts = False ExlObj.Quit 'Excelの終了 Set ExlObj = Nothing ------------------------------ シート内のレコードが多く大量の枚数を印刷する場合、PrintOutメソッドから次の処理(Quit→オブジェクト破棄)を行ってますが、PrintOutから次の処理に移った後にExcelオブジェクトが残ることはないでしょうか? また、ActiveSheetのCloseは必ずQuit前に実施する必要はありますでしょうか?

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 最初の「ExlObj」の設定の部分か、コードの全体像が分かるものを見せてください。ご質問の内容とコードでは整合性がありません。なぜ、Excelを終了しなければならないのか、意味が分かりませんから、回答が付けにくいです。

BAIKAN
質問者

お礼

申し訳ありません、事象整理が十分ではありませんでした。 また状況が変わりましたので一旦質問を締め切りたいと思います。

関連するQ&A

  • VBAでのprintOut時にエラーが発生します。

    Excel2010のVBAで新たに作成した分のシートだけを印刷する処理を書いているのですが、 印刷(printOut)の所で次のエラーが出てしまいます。 【オブジェクト変数またはWithブロック変数が設定されていません。】 解決策をご教授願います。よろしくお願いします。 Dim firstSheetsMaisu As Integer '最初のシート枚数 Dim sheets As Worksheet Dim sheetIndexArray() As Integer   '配列 Dim hairetuSu As Integer        '要素数 firstSheetsMaisu = 4 '最初のシート枚数を4に設定 sheetsMaisu = Worksheets.count '新たに作成した分を含めた現在のシート枚数 Application.DisplayAlerts = False  '最初のシート分を除いた作成したシート文を配列に格納します。 For i = sheetsMaisu To firstSheetsMaisu + 1 Step -1 Worksheets(i).Activate ActiveSheet.PageSetup.PaperSize = xlPaperA4 ReDim Preserve sheetIndexArray(hairetuSu) sheetIndexArray(hairetuSu) = i hairetuSu = hairetuSu + 1 Next   sheets(sheetIndexArray).printOut  '←ここでエラーが発生します。 sheets("入力項目").Select Application.DisplayAlerts = True

  • エクセル2000VBAからの印刷で実行時エラー1004発生

    エクセル2000のVBAマクロ中で印刷をしよう として、実行時エラー1004が発生し、原因が分からず 苦慮しています。 (前略) Sheets("ラベル印刷").Select ... ActiveSheet.PageSetup.PrintArea = "$A$1:$B$2" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True を実行すると、WorksheetクラスのPrintOutメソッドが 失敗しましたというエラーがでます。 色々試して、 Worksheets("ラベル印刷").Activate ActiveSheet.PrintOut とやってみたり、シートの名称をデフォルトのSheet1に 戻したりしても同様でした。 同じモジュール中で、 Sub printtest()   Worksheets("ラベル印刷").PrintOut End Sub というのを記述して、VBAエディター中で実行ボタン (▼)で実行したり、ワークシートのツール/マクロの 実行から実行すると問題なく印刷できます。 ところが、マクロを改造してこのサブルーチンをコールする ようにすると、上と同様の現象が出ます。 別のPCで試みても再現されました。 他の部分は完成したつもりなのに、印刷が出来ず困っております。 アドバイスお願いします。

  • VBAでEXCELのワークシートを削除時に警告メッセージをでないようにしたい。

    ACCESSのVBAでEXCELのワークシートを削除時に警告メッセージをでないようにしたいのですが、 ネットを参考に下記のようにしたのですが、  Application.DisplayAlerts = False  ActiveSheet.Delete  Application.DisplayAlerts = True DisplayAlertsが反転してメソッドまたはデータメンバが見つかりません。とエラーメッセージがでます。 ご存知の方宜しくお願いします。

  • 【VBA】 Copyメソッドの使用方法について

    【動作環境】 Excel 2003 【仕様概要】 EXCEL起動時に共有フォルダ内のEXCELシートよりマスタ情報を取得し、クライアント側のマスタ情報を最新情報に更新させたい。 【質問内容】 下記コードを実行すると12行目のCopyメソッドを発行時に下記メッセージが表示されてしまいます。 初歩的なコーディング誤りと思われますが、ご教授お願い申し上げます。 [実行時エラー'1004' 'Copyメソッドは失敗しました: '_Worksheet'オブジェクト] ========================================================================= 01: Sub auto_open() 02: Dim xlApp As Excel.Application '/* EXCELオブジェクト変数宣言 - Application */ 03: Dim xlBook As Excel.Workbook '/* EXCELオブジェクト変数宣言 - Workbook */ 04: Dim xlSheet As Excel.Worksheet '/* EXCELオブジェクト変数宣言 - Worksheet */ 05: 06: ' /* EXCELファイルオープン */ 07: Set xlApp = CreateObject("Excel.Application") 08: Set xlBook = xlApp.Workbooks.Open("共有ドライブ\マスタ情報.xls") 09: Set xlSheet = xlBook.Worksheets("マスタ情報") 10: 11: ' /* マスタ情報取得(ワークシートコピー) */ 12: xlSheet.Copy after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) 13: 14: ' /* EXCELアプリケーション終了 */ 15: xlBook.Close 16: xlApp.Quit 17: 18: ' /* EXCELオブジェクト変数解放 */ 19: Set xlSheet = Nothing 20: Set xlBook = Nothing 21: Set xlApp = Nothing 22: End Sub =========================================================================

  • Excel 2003 で、次のようなVBAを入力しています。

    Excel 2003 で、次のようなVBAを入力しています。 手動でも同じパスワードでシートの保護設定、解除をしたいのですが、 方法はありますか? ご教示よろしくお願いいたします。 ActiveSheet.Unprotect Password ="pass" 'シート保護解除 Selection.AutoFilter Field:=7, Criteria1:="<>" '項目「得意先名」が、「空白以外」を抽出 ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True '印刷 Selection.AutoFilter Field:=7 '印刷範囲の解除 ActiveSheet.Protect Password="pass"

  • Excel エクセル マクロ VBA

    エクセルマクロで指定したシート(2シート目)から末尾のシートまで印刷したい場合、下記のようなコードで良いでしょうか? Sub Sample1() Dim i As Long For i = 2 To Sheets.Count ActiveWorkbook.Sheets(i).Select (Replace:= False) Next i Activesheet.PrintOut Preview:=True End Sub

  • VB6からExcelを操作する

    VB6.0からExcelの操作をしています。 そのなかで、Excelシートを印刷したいのですが、どのようにしたら良いのでしょうか。 また、ExcelVBAのFunctionやSubを実行するにはどのようにするのでしょうか。 VB6.0内でExcel操作は次のようにしています。 Dim ExcelApp As Object Dim EWorkbook As Object Dim ESheet As Object Set ExcelApp = CreateObject("Excel.Application") Set EWorkbook = ExcelApp.Workbooks.Open(ExcelBookFlNm) Set ESheet = EWorkbook.Sheets(M_SheetNm) Set ESheet = Nothing Set EWorkbook = Nothing ExcelApp.Quit Set ExcelApp = Nothing よろしくお願いします。

  • Excel VBAで印刷ジョブを一つにしたい

    Excel VBAを使用して、シートAの元データの表の一行目から、 決められたセルに5レコードずつ読み込んで表示させる AccessのレポートようなシートBを作りました。 シートAには約500レコードあり、 シートBのページ数は約100ページ分になります。 このシートBの100ページを一度に印刷したく マクロを組み、ページを変えながらPrintOutメソッドで 印刷をしてみましたが、 プリンタのジョブが多くなりすぎて困っています。 Excelのみで、別のブックを使わずに解決する方法を探しています。 何か良い方法はないでしょうか。 よろしくお願いします。

  • VBSでExcelファイル印刷時のプリンタ指定

    VBSでExcelファイルを印刷する際、場合によってはプリンタを変えて印刷したいのですが、プリンタの指定をどのようにコーディングすれば良いのか分かりません。 印刷時のソースは下記のとおりです。 Set Excel = CreateObject("Excel.Application") Set objWkBk = Excel.Workbooks.Open("C:\Test.xls", , False) Excel.ActiveWindow.SelectedSheets.PrintOut() Excel.DisplayAlerts = False Excel.quit() objWkBk.close Set objWkBk = Nothing Set Excel = Nothing 上記コーディングに下記(1)~(4)を追加または、修正して試してみましたが、エラーとなってしまいます。 (1)Application.ActivePrinter = "\\NAS0013W\Kyocera LS-6700SKX2" (2)Excel.ActivePrinter = "\\NAS0013W\Kyocera LS-6700SKX2" (3)Excel.ActiveWindow.SelectedSheets.PrintOut("\\NAS0013W\Kyocera LS-6700SKX2") (4)Excel.ActiveWindow.SelectedSheets.PrintOut(ActivePrinter = "\\NAS0013W\Kyocera LS-6700SKX2") そもそも、vbsからはプリンタの指定はできないのでしょうか? ご教授いただきたく、よろしくお願いいたします。

  • Excel VBAでのシートの削除について

    Excel VBAで、シート上に配置されたボタンをクリックすることで、メッセージを出さずにそのシートの削除をしたいと思っています。 サンプルとして、シート上(例えばSheet1)にボタンを1個配置し、 ------------------------------------------------------- Private Sub CommandButton1_Click() Application.DisplayAlerts = False Delete Application.DisplayAlerts = True End Sub ------------------------------------------------------- のようにすると、オートメーションエラーが起きます。 そこで、 Application.DisplayAlerts = True をコメントアウトしてやれば実行はできるのですが、その後別のシートで処理を行う場合には、再度メッセージを表示してほしいと思っています。 ためしに、Sheet1削除後にアクティブになるSheet2に次のようなコードを記述しました。Sheet1同様、シート上にボタンを1個配置しています。 ------------------------------------------------------- Private Sub CommandButton1_Click() MsgBox Application.DisplayAlerts End Sub Private Sub Worksheet_Activate() MsgBox "次に出るメッセージはアクティブ直後のDisplayAlerts設定。" MsgBox Application.DisplayAlerts Application.DisplayAlerts = True MsgBox "次に出るメッセージは変更後のDisplayAlerts設定。" MsgBox Application.DisplayAlerts End Sub ------------------------------------------------------- こうすれば、Sheet1削除後、アクティブになった直後はDisplayAlertsがFalse。その後設定変更してTrueになるかとおもったのですが、結果はFalseでした。しかしその後、ボタンをクリックするとTrueが返ってきました。 いろいろ調べましたが、なぜこのような結果になるのかわかりません。よろしくお願いいたします。

専門家に質問してみよう