エクセル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で試みても再現されました。
他の部分は完成したつもりなのに、印刷が出来ず困っております。
アドバイスお願いします。
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/articl …
ご回答ありがとうございました。
マイクロソフトジャパンのサイトで検索された、
”VBAでプリンタ関連コマンド利用時に強制終了”
という内容でしょうか。
試みてみましたが駄目でした。
やはり、EXCELのバグなのでしょうね。
先人の作成したマクロに改造を重ねて来ており
再構築には旧版EXCELのダイアログ等が作り直しになるので覚悟が必要です...
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
教えていただいた、"ActiveCell.Activate "
を入れてみましたが残念ながら、改善されませんでした。
ありがとうございました。
No.3
- 回答日時:
私はExcel97ですが、最近はコマンドボタンを使わずにダイレクトに実行するようにしています。
なぜかコマンドボタンを使って実行マクロを呼び出すとエラーが生じるから。オートシェイプでボタンを書き、右クリックで実行マクロを登録するやり方です。
質問とは違うかもしれませんが、コマンドボタンで1クッション置いていた時よりエラーは無いような気がします。
アドバイスありがとうございます。
マクロでダイアログ(エクセル95から移行した隠しダイアログ)
を表示して、種々の入力を行い、そのダイアログのボタンから
更に実行するマクロなので、直に実行するという訳にはいかないのです。
ご参考までに、本日このために雑誌を購入してきて、付録の
Office2000sp-3でアップデートしてみましたが、事態は変わりませんでした。
No.4
- 回答日時:
再びこんにちは。
省略しないでソースを提示してみては?
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のユーザーフォームに載せ替えないと
ダメなんでしょうかね.....
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画面の実行メニュによって実行しました。
「ラベル印刷」と言うシートのデータが揃った段階以後でページセットアップ以下のマクロの記録を取り、本番のプログラムのその(ページ設定の関連)部分に上書き貼りつけし、実行してエラーが出ずに印刷するか試して見られてはどうでしょう。
他に動く(正常に印刷する)コード部分を作り、部分的「置換え法」によって、不都合個所を絞るより他ないと思います。
ご回答ありがとうございました。
簡略化したコードでエラーが再現した状況を下の方へのお礼文に記しておきました。
エクセル95から移行したダイアログから実行することでエラーが出る様です。
操作が2段階になってしまいますが、ダイアログの処理を終了した後で、
ワークシート中に設けたコマンドボタンから実行すると問題がないのでとりあえずそれでしのぎます。
元気があったら、エクセル2000のユーザーフォームに
作り替えようと思いますが...
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
なるほど発想の転換ですね。
ダイアログを呼んだ元のサブルーチンから、
ダイアログの処理終了後に印刷すれば良いのですね。
単純にワークシート印刷コマンドを付け足して試したらうまくいきました。
自分一人では思いつかなかったと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) DisplayAlertsブロパティで ”実行時エラー424オブジェクトが必要です” 5 2022/05/15 18:02
- その他(Microsoft Office) Excelのマクロについて教えてください。 1 2022/03/25 10:03
- Excel(エクセル) エクセルの印刷マクロについて質問があります。 現在、下記のマクロで印刷しています。Sheet1のD6 5 2023/06/12 10:59
- Excel(エクセル) 【マクロ】webアドレスにて指定されたCSVファイル【excelソフト表示】を印刷する件 1 2023/02/15 01:52
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- プリンタ・スキャナー 2台のプリンターでそれぞれ異なる様式の帳票を印刷したい。 2 2022/09/06 10:07
- Visual Basic(VBA) エクセル365のVBAで困っています。どう修正したらよいか添削をお願いします 2 2023/05/03 17:35
- Excel(エクセル) 【マクロ】プリントスクリーンした画像をエクセルに貼付して印刷したい 6 2022/11/30 20:11
- Excel(エクセル) セルによって印刷するシートを変える方法 EXCEL-VBA 2 2022/08/01 20:48
- Excel(エクセル) エクセルのマクロで複数シートを両面印刷するには? 2 2022/12/08 23:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル初心者です 関数の入れ...
-
【関数】先頭だけにある、半角...
-
エクセル 白黒印刷で白線を印刷...
-
Excelのチェックボックスの使い...
-
【関数】適切な文字数の数字を...
-
Excelのpivotについて質問です
-
Excel ピボットテーブルで日付...
-
LOOKUP関数を使えばいいのでし...
-
エクセル関数を教えてください
-
エクセルのセルに同じ大きさの...
-
UNIQUE関数が使えないバージョ...
-
excelの不要な行の削除ができな...
-
エクセルで「-0.0」と表示さ...
-
時間によってファイル名が変わ...
-
WPS OFFICEでの縦書きについて
-
エクセルの関数について教えて...
-
Aというブックの1というシート...
-
【マクロ】シート名を取得する...
-
VBA Private Sub Worksheet_Cha...
-
VBA、Excelのworkbook.open に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報