エクセル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.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
なるほど発想の転換ですね。
ダイアログを呼んだ元のサブルーチンから、
ダイアログの処理終了後に印刷すれば良いのですね。
単純にワークシート印刷コマンドを付け足して試したらうまくいきました。
自分一人では思いつかなかったと思います。
ありがとうございました。
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.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.3
- 回答日時:
私はExcel97ですが、最近はコマンドボタンを使わずにダイレクトに実行するようにしています。
なぜかコマンドボタンを使って実行マクロを呼び出すとエラーが生じるから。オートシェイプでボタンを書き、右クリックで実行マクロを登録するやり方です。
質問とは違うかもしれませんが、コマンドボタンで1クッション置いていた時よりエラーは無いような気がします。
アドバイスありがとうございます。
マクロでダイアログ(エクセル95から移行した隠しダイアログ)
を表示して、種々の入力を行い、そのダイアログのボタンから
更に実行するマクロなので、直に実行するという訳にはいかないのです。
ご参考までに、本日このために雑誌を購入してきて、付録の
Office2000sp-3でアップデートしてみましたが、事態は変わりませんでした。
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.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のダイアログ等が作り直しになるので覚悟が必要です...
お探しの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関数の式の作り方を教えて...
-
【ExcelVBA】最終行の取得で困...
-
Excelのセル値に基づいて図形の...
-
EXCELのページを、枠線を維持し...
-
Excel 数式バーの情報を、別シ...
-
Excelで、時間の引き算でマイナ...
-
Excel 最小二乗法 二次関数
-
Excelで数式を用いて番号を順に...
-
エクセルで現場ごとに機材の移...
-
他部署からもらう データで、 ...
-
とびとびの大量セルを選択した...
-
Excel 1の位の数字で処理を分岐...
-
-1234 を (1234) と表記する由...
-
エクセルの数式バーのフォント...
-
MACにおけるエクセルの入力トラ...
-
Excelのセルの色を変えた行(す...
-
エクセルの数式について教えて...
-
Lookup関数
-
Excelでの記号と特殊文字につい...
-
EXCELの散布図で日付が1900年に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
半角カタカナをヘボン式ローマ...
-
(マクロ)vlookupの元データを同...
-
エクセルで上位バイトのセルと...
-
exselの質問です
-
Excel 大小比較演算子による「...
-
Excel VBについての質問です。
-
エクセルの問題です。絶対値の...
-
非表示列の再表示に失敗
-
職場の人から聞かれており、こ...
-
Excel関数-文字列で自動作成さ...
-
Excelデータをコピペして、ペー...
-
ユーザー定義関数をアドイン登...
-
【マクロ】for next構文について
-
エクセルの日付を編集する
-
【マクロ】VLOOKUPにて参照元に...
-
exselで最小数で並び替える関数
-
libre 表計算ソフトの計算がう...
-
エクセルで表
-
エクセルの表で1年間の曜日を...
-
西暦和暦
おすすめ情報