- ベストアンサー
Excel2000VBA印刷時にエラー1004発生
- エクセル2000のVBAマクロ中で印刷をしようとすると、実行時エラー1004が発生します。
- PrintOutメソッドが失敗し、エラーメッセージが表示されます。
- 一部の実行方法では印刷が成功するが、改造したマクロでは再現されるため困っています。
- みんなの回答 (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
その他の回答 (5)
- imogasi
- ベストアンサー率27% (4737/17069)
参考になるかどうか判りませんが 私の場合エクセル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画面の実行メニュによって実行しました。 「ラベル印刷」と言うシートのデータが揃った段階以後でページセットアップ以下のマクロの記録を取り、本番のプログラムのその(ページ設定の関連)部分に上書き貼りつけし、実行してエラーが出ずに印刷するか試して見られてはどうでしょう。 他に動く(正常に印刷する)コード部分を作り、部分的「置換え法」によって、不都合個所を絞るより他ないと思います。
お礼
ご回答ありがとうございました。 簡略化したコードでエラーが再現した状況を下の方へのお礼文に記しておきました。 エクセル95から移行したダイアログから実行することでエラーが出る様です。 操作が2段階になってしまいますが、ダイアログの処理を終了した後で、 ワークシート中に設けたコマンドボタンから実行すると問題がないのでとりあえずそれでしのぎます。 元気があったら、エクセル2000のユーザーフォームに 作り替えようと思いますが...
- papayuka
- ベストアンサー率45% (1388/3066)
再びこんにちは。 省略しないでソースを提示してみては? Sub printtest() Worksheets("ラベル印刷").PrintOut End Sub が印刷出来るのですから、これに至るまでに問題があると思います。
お礼
アドバイスいただいた皆さんありがとうございました。 見通しは暗そうですが、ご参考までに簡略化したリストを開示させていただきます。 エクセル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のユーザーフォームに載せ替えないと ダメなんでしょうかね.....
補足
ご指摘ごもっともです。 ただ、非常にマクロが長いのですべて載せるのは控えさせていただきます。 近道はなさそうなので、枝葉を削って簡略化し、どこで問題が出るのか 検討してみます。 結果が出たら報告させていただきます。
- kazu828
- ベストアンサー率0% (0/1)
私はExcel97ですが、最近はコマンドボタンを使わずにダイレクトに実行するようにしています。なぜかコマンドボタンを使って実行マクロを呼び出すとエラーが生じるから。 オートシェイプでボタンを書き、右クリックで実行マクロを登録するやり方です。 質問とは違うかもしれませんが、コマンドボタンで1クッション置いていた時よりエラーは無いような気がします。
お礼
アドバイスありがとうございます。 マクロでダイアログ(エクセル95から移行した隠しダイアログ) を表示して、種々の入力を行い、そのダイアログのボタンから 更に実行するマクロなので、直に実行するという訳にはいかないのです。 ご参考までに、本日このために雑誌を購入してきて、付録の Office2000sp-3でアップデートしてみましたが、事態は変わりませんでした。
- papayuka
- ベストアンサー率45% (1388/3066)
こんにちは。 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
お礼
教えていただいた、"ActiveCell.Activate " を入れてみましたが残念ながら、改善されませんでした。 ありがとうございました。
- pureh
- ベストアンサー率69% (36/52)
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 が発生する場合があります。 のような不具合があることを認めてます。 ここに書いてある回避策を試してみたらどうでしょうか? 根本的な回避策ではないようですが...
お礼
ご回答ありがとうございました。 マイクロソフトジャパンのサイトで検索された、 ”VBAでプリンタ関連コマンド利用時に強制終了” という内容でしょうか。 試みてみましたが駄目でした。 やはり、EXCELのバグなのでしょうね。 先人の作成したマクロに改造を重ねて来ており 再構築には旧版EXCELのダイアログ等が作り直しになるので覚悟が必要です...
お礼
なるほど発想の転換ですね。 ダイアログを呼んだ元のサブルーチンから、 ダイアログの処理終了後に印刷すれば良いのですね。 単純にワークシート印刷コマンドを付け足して試したらうまくいきました。 自分一人では思いつかなかったと思います。 ありがとうございました。