Excel2000VBA印刷時にエラー1004発生

このQ&Aのポイント
  • エクセル2000のVBAマクロ中で印刷をしようとすると、実行時エラー1004が発生します。
  • PrintOutメソッドが失敗し、エラーメッセージが表示されます。
  • 一部の実行方法では印刷が成功するが、改造したマクロでは再現されるため困っています。
回答を見る
  • ベストアンサー

エクセル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で試みても再現されました。 他の部分は完成したつもりなのに、印刷が出来ず困っております。 アドバイスお願いします。

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.6

再びこんにちは。 Excel97ですがやはりダメでした。 どうやらダイアログシートがモーダル中はダメみたいですね。 UserFormだと問題なさそうですが。。。 代替案としてFLGで処理の有無を判断して、シートのボタン(フォームのボタン及びCommandButton)から SokutyoCalc を呼んだ場合はそれっぽくなりましたが。。。 Option Explicit Dim flg As Boolean Sub SokutyoCalc() Dim msgResult  flg = False  DialogSheets("SokutyoDialog").Show  If flg Then    msgResult = MsgBox("このまま印刷も?", vbYesNo + vbQuestion, "印刷")    If msgResult = vbYes Then Application.Dialogs(xlDialogPrint).Show  End If End Sub Sub CalcBegin_Click()  flg = True  Worksheets("ラベル印刷").Activate  Worksheets("ラベル印刷").Range("A1") = "なんかの処理"  DialogSheets("SokutyoDialog").Hide End Sub

mitarashi
質問者

お礼

なるほど発想の転換ですね。 ダイアログを呼んだ元のサブルーチンから、 ダイアログの処理終了後に印刷すれば良いのですね。 単純にワークシート印刷コマンドを付け足して試したらうまくいきました。 自分一人では思いつかなかったと思います。 ありがとうございました。

その他の回答 (5)

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

参考になるかどうか判りませんが 私の場合エクセル2000で Sub test01() Sheets("ラベル印刷").Select ActiveSheet.PageSetup.PrintArea = "$A$1:$B$2" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Worksheets("ラベル印刷").Activate ActiveSheet.PrintOut End Sub でシート名「ラベル印刷」(名前変更前はSheet1)のA1:B2の内容をエラーがでず、印刷しました。 プリンタはC社の旧いバブルジェットのものです 実行はVBE画面の実行メニュによって実行しました。 「ラベル印刷」と言うシートのデータが揃った段階以後でページセットアップ以下のマクロの記録を取り、本番のプログラムのその(ページ設定の関連)部分に上書き貼りつけし、実行してエラーが出ずに印刷するか試して見られてはどうでしょう。 他に動く(正常に印刷する)コード部分を作り、部分的「置換え法」によって、不都合個所を絞るより他ないと思います。

mitarashi
質問者

お礼

ご回答ありがとうございました。 簡略化したコードでエラーが再現した状況を下の方へのお礼文に記しておきました。 エクセル95から移行したダイアログから実行することでエラーが出る様です。 操作が2段階になってしまいますが、ダイアログの処理を終了した後で、 ワークシート中に設けたコマンドボタンから実行すると問題がないのでとりあえずそれでしのぎます。 元気があったら、エクセル2000のユーザーフォームに 作り替えようと思いますが...

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.4

再びこんにちは。 省略しないでソースを提示してみては? Sub printtest()   Worksheets("ラベル印刷").PrintOut End Sub が印刷出来るのですから、これに至るまでに問題があると思います。

mitarashi
質問者

お礼

アドバイスいただいた皆さんありがとうございました。 見通しは暗そうですが、ご参考までに簡略化したリストを開示させていただきます。 エクセル95からの移行マクロなので、全て標準モジュール内に 含まれています。全部で9行に簡略化してみました。 Option Explicit ‘これはワークシートのコマンドボタンから実行され、 ‘エクセル95から移行のダイアログを表示する Sub SokutyoCalc() DialogSheets("SokutyoDialog").Show End Sub ‘次は上述ダイアログのコマンドボタンから実行され、諸処理を ‘行った後にプリントアウトするマクロ ‘ダイアログからは、そのCalcBegin_Click実行用のボタン ‘以外は事態の単純化のため外してしまった。 Sub CalcBegin_Click() Worksheets("ラベル印刷").Activate ActiveSheet.PrintOut DialogSheets("SokutyoDialog").Hide End Sub この状態でもエラー1004が発生します。 ワークシートにコマンドボタンを設置し、そこから Call CalcBegin_Click() を実行するとエラーは発生せず、印刷されました。 以上により、エクセル95のダイアログを経ることが原因と 思われます。また、上記Sub CalcBegin_Click()で、 ダイアログを閉じてからActiveSheet.PrintOutとしても 事態は変わりませんでした。 ダイアログもEXCEL2000のユーザーフォームに載せ替えないと ダメなんでしょうかね.....

mitarashi
質問者

補足

ご指摘ごもっともです。 ただ、非常にマクロが長いのですべて載せるのは控えさせていただきます。 近道はなさそうなので、枝葉を削って簡略化し、どこで問題が出るのか 検討してみます。 結果が出たら報告させていただきます。

  • kazu828
  • ベストアンサー率0% (0/1)
回答No.3

私はExcel97ですが、最近はコマンドボタンを使わずにダイレクトに実行するようにしています。なぜかコマンドボタンを使って実行マクロを呼び出すとエラーが生じるから。 オートシェイプでボタンを書き、右クリックで実行マクロを登録するやり方です。 質問とは違うかもしれませんが、コマンドボタンで1クッション置いていた時よりエラーは無いような気がします。

mitarashi
質問者

お礼

アドバイスありがとうございます。 マクロでダイアログ(エクセル95から移行した隠しダイアログ) を表示して、種々の入力を行い、そのダイアログのボタンから 更に実行するマクロなので、直に実行するという訳にはいかないのです。 ご参考までに、本日このために雑誌を購入してきて、付録の Office2000sp-3でアップデートしてみましたが、事態は変わりませんでした。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

こんにちは。 Excel97しか持ってないので外してるかも知れません。 CommandButtonなどから呼んだ場合に「1004」が出る時は「ActiveCell.Activate」を入れてます。 Excel97で、Sheet1上にCommandButtonを1つ置き、Clickイベントに Private Sub CommandButton1_Click()  Worksheets("Sheet1").Activate  Worksheets("Sheet1").Copy after:=Worksheets(1) End Sub だと「実行時エラー1004」が出ますが、 Private Sub CommandButton1_Click()  ActiveCell.Activate  Worksheets("Sheet1").Copy after:=Worksheets(1) End Sub だとコピー出来ます。 同様の原理で↓とかにしてみたらどうでしょう? Sub printtest()   ActiveCell.Activate   Worksheets("ラベル印刷").PrintOut End Sub

mitarashi
質問者

お礼

教えていただいた、"ActiveCell.Activate " を入れてみましたが残念ながら、改善されませんでした。 ありがとうございました。

  • pureh
  • ベストアンサー率69% (36/52)
回答No.1

Win98SE,Excel2000+SP3の環境で、 下記プログラムを試してみましたが、 エラーは出ませんでした。 Sub printtest() Sheets("ラベル印刷").Select ActiveSheet.PageSetup.PrintArea = "$A$1:$B$2" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End Sub ただ、マイクロソフトは↓のURLで、  Excel VBA で改ページを追加する (HPageBreaks コレクション  オブジェクト Add メソッド) 場合等、プリンタ情報の取得を伴  う処理を行うと、Excel が強制終了し、VBA 実行時エラー 1004  が発生する場合があります。 のような不具合があることを認めてます。 ここに書いてある回避策を試してみたらどうでしょうか? 根本的な回避策ではないようですが...

参考URL:
http://www.microsoft.com/japan/support/kb/articles/436/4/90.asp
mitarashi
質問者

お礼

ご回答ありがとうございました。 マイクロソフトジャパンのサイトで検索された、 ”VBAでプリンタ関連コマンド利用時に強制終了” という内容でしょうか。 試みてみましたが駄目でした。 やはり、EXCELのバグなのでしょうね。 先人の作成したマクロに改造を重ねて来ており 再構築には旧版EXCELのダイアログ等が作り直しになるので覚悟が必要です...

関連するQ&A

  • エクセルマクロで印刷実行時に「黒」の設定・・・

    どなたか教えてください。 マクロで印刷の実行をしています。 シート上にはカラー文字が含まれていますが「常に黒」の 単色で印刷させたいのですが、方法はないでしょうか? 現状はプリンターのプロパティーで(カラー/黒)の選択を 黒にして手動で印刷しています。EPSON PX-V500使っています。 よろしくお願いします(ponta_024) ---------------------------------------------------------- ActiveSheet.PageSetup.PrintArea = "$B$3:$I$31" ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _ :=True このような記述になっております。

  • エクセル2007 印刷マクロ

    A1からE25までを印刷したいのですが,現在このようにしています。 ActiveSheet.PageSetup.PrintArea = "$A$1:$E$12" ActiveWindow.SelectedSheets.PrintOut Copies:=1 ActiveSheet.PageSetup.PrintArea = "$A$13:$E$25" ActiveWindow.SelectedSheets.PrintOut Copies:=1 これを,ActiveSheet.PageSetup.PrintArea = "$A$1:$E$25" にすると,1枚目と2枚目の区切りが自分の思うようになりません。 改ページプレビューを使って,ページ区切りを設定するのではなく, マクロで何とかしたいと考えています。 1枚目はA1:E12,2枚目はA13:E25に固定する方法を教えて下さい。

  • エクセルVBA実行後にファイルを自動で閉じるVBA

    Sub 印刷() ' ' Macro1 Macro ' マクロ記録日 : 201X/X/X ユーザー名 : AAAA ' ' If MsgBox("実行する場合はOK、間違ってこのボタンをクリックした場合はキャンセルをクリックしてください。(日付確認後、印刷のこと。)", vbOKCancel) = vbCancel Then End End If 'A印刷 ChDir "L:\フォルダB\X\新規" Workbooks.Open Filename:="L:\フォルダB\X\新規\記録表\工程分析.xls" Sheets("毎日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("月曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("火曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("水曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("木曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("金曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("土曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("日曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveWorkbook.Save ActiveWindow.Close あるエクセルファイルのボタンに上記のVBAが記入されています。 そのボタンを押すと「工程分析.xls」ファイルを呼び出し各シートを自動印刷して保存して閉じるVBAです。 質問ですがボタンの配置されたあるエクセルファイルの上記VBAの処理を全て完了した後に上書き保存を自動で実行し、自動であるエクセルファイルを閉じるVBAはどの様に追加すれば良いでしょうか?

  • 実行時エラー424の発生について

    エクセル2003で印刷指定マクロをつくりましたが、「実行時エラー424 オブジェクトがありません」とエラーがでるシートと正常に動くシートがあります。しかも、同じブック内です。 コンポボックスか条件付き書式が入っていることが原因ではと思うのですが、よく分かりません。 教えて下さい。以下にそのマクロを記述します。 Sub PrintArea_5() Dim pArea As Range Worksheets("選抜").Select Prompt = "印刷範囲をマウスでドラッグして下さい。" Set pArea = Application.InputBox(Prompt, Type:=8) ActiveSheet.PageSetup.PrintArea = pArea.Address End Sub

  • VBAの範囲印刷設定を修正したいのですが

    VBAの初心者です。詳しく教えてください。 1.下記のVBAでシートを非表示にしたときに実行時エラー1004が出るのですが  どうしたらよいのですか。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー Sub printappointedrange() Worksheets("シート1").Activate Range("A1:AB42").Select 'セル範囲の選択 With ActiveSheet .PageSetup.PrintArea = Selection.Address '印刷範囲の指定 .PrintOut '印刷 .PageSetup.PrintArea = False '印刷範囲のクリア End With End sub ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 2.シートに印刷ボタン作成して、印刷はできるのですが、印刷する前にプリンターの設定を変更する方法は無いのですか。

  • Excel VBAで自動印刷プログラムの作り方を教えて下さい。

    あるファイルにある全てのグラフを印刷するマクロを作りたいのですが、 どのようにすれば良いのでしょうか? Sub Macro2() ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End Sub に何を付け足せば良いのでしょうか? 何卒よろしくお願い致します。

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

    VBA初心者ですのでどうか詳しく教えてください。下記のマクロをエクセルで組んだのですが・・・ -------------------------------------------------------------------- Sub hideworksheets() Worksheets("sheet1").Visible = False End Sub Sub ボタン_Click() ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet1").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet2").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet3").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet4").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub ------------------------------------------------------------ 1.上記設定で"sheet5"という別シートにボタンを設置した場合、このボタンを実行すると、シート1~4のほかにシート5まで印刷されてしまいます。シート5を印刷したくない場合のVBAの記述について教えてください。 2.「Sub hideworksheets()  Worksheets("sheet1").Visible = False    End Sub」    の箇所で、シート1を非表示にしたいのですが、このマクロを実行時、「Sub ボタン_Click()」以下のマクロを実行しようとすると、「実行時エラー1004 worksheeクラスのselectメソッドが失敗しました」のエラーがでてしまいます。シート1を非表示にし、無事印刷のマクロを実行する為の記述を教えてください。

  • VBAで印刷するとエラーになってしまいます。

    VBAで印刷するとエラーになってしまいます。 EXCELシートをボタンの押下で印刷するマクロを組んだのですが、 実行すると必ずエラーになってEXCEL自体が落ちてしまいます。 添付画面を参照して下さい。 普通にEXCELの印刷([ファイル]->[印刷])から印刷すると問題なく印刷できます。 何か足りないものがあるのでしょうか? どなたか教えてください 以下ソース ---- Private Sub btn_Print_Click() 'ActiveSheet.PageSetup.CenterHeader = "&B&12印刷" ActiveWorkbook.Worksheets(1).PrintOut End Sub ----

  • エクセル2007 メッセージボックスについて教えて下さい

    セルA1に"1"が入れば"b10~m60"を印刷(1ページ分)、 同様に、"2"が入れば"b61~m110"(2ページ分)、"3"が入れば"b111~m160"(2ページ分)を印刷する マクロボタンがあります。 現在、印刷を実行する前にメッセージボックスで「印刷します」→「OK」「キャンセル」の確認をしていますが このメッセージに、セルA1に入れた数値で確認したいのですができるでしょうか?? 例)セルA1="1"→MsgBox「1ページ印刷します」    セルA1="2"→MsgBox「2ページ印刷します」 分かりづらい説明で申し訳ありません。よろしくお願いします。 ↓現在の記述↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ Sub test() If MsgBox("印刷します", vbOKCancel) = vbCancel Then Exit Sub End If Select Case Range("a1").Value   Case "1" ActiveSheet.PageSetup.PrintArea = "b10:m60" ActiveWindow.SelectedSheets.PrintOut Copies:=1  Case "2" ActiveSheet.PageSetup.PrintArea = "b61:m110" ActiveWindow.SelectedSheets.PrintOut Copies:=1   Case "3" ActiveSheet.PageSetup.PrintArea = "b111:m160" ActiveWindow.SelectedSheets.PrintOut Copies:=1  End Select End Sub

  • Excelで両面印刷

    Excel2007を使っています。 プリンタは,両面印刷の設定をしている状態です。 マクロで印刷をかけると,あるシートは両面印刷してくれますが, 違うシートはしてくれません。 シート名が違うだけで,後は全く同じマクロなのに不思議です。 理由をご存じの方,教えてください。 Sub 縮小印刷1() Sheets("縮小印刷1").Select A = InputBox("どこから印刷しますか?") B = InputBox("どこまで印刷しますか?) For I = A To B Step 2 Range("D2").Value = I ActiveSheet.PageSetup.PrintArea = "$A$1:$B$16" ActiveWindow.SelectedSheets.PrintOut Copies:=1 Next I End Sub

専門家に質問してみよう