- 締切済み
マクロの連続印刷が突然不可能になりました(>_<)
会社で使っているエクセルのマクロの連続印刷が先月まで出来ていたのが、今月突然エラーが出て2枚目以降が「印刷中」のまま動かなくなってしまいました。 使用しているマクロは下記の通りです。 Sub 個人票印刷() Range("会社") = Range("自") Do While Range("会社") <= Range("至") Sheets("社員").PrintOut Range("会社") = Range("会社") + 1 Loop End Sub 残業用紙を名前と部署だけ変えて印刷するために、指定番号分だけ繰り返すものなのですが、印刷しようとすると1枚目だけ印刷されてその後動かなくなってしまいます。 自1→至1 の場合は正常に印刷可能。 自1→至5 の場合は2枚目以降が印刷不可能になります。 何がエラーなのか確認する方法はあるのでしょうか? マクロは初心者で前任者のものを使用しているのみです。 どうかよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 直感的にみて、コード自体に無理がありますね。 名前-定義で登録したものでしょうけれども、 Range("会社") <= Range("至") 一体、どんな論理かと思います。 読み手には、Range("会社") も、Range("至")も、意味が分かりません。それ自体は、ユーザーの定義の範囲ですから、分からないのです。 VBA初心者から中級クラスの方は、良く、Rangeの引数に、ワークシートで登録した「名前定義」を使うのですが、それは、固定しているものではありませんから、コードの可読性をあげるなら、勤めて使わないほうがよいです。 「名前定義」は、いくら絶対参照にしたところで移動します。それに、「名前定義」をしたもので、それを掲示板で判定してほしいといわれても、それ自体では、判定できません。ただ、「使うべきではない」というだけです。 >何がエラーなのか確認する方法はあるのでしょうか? それは、ご自身のワークシートで調べるしかありません。 はっきり言えば、そのマクロは、記録マクロでもよいので作り直しですね。VBAが分からないのでしたら、質問を新たに出して、相談したほうがよいです。そのコードは手が付けられないです。 引数は、「A1アドレス」を入れるべきです。 ただし、いずれにしても、以下のコードは奇妙です。 Do While Range("会社") <= Range("至") Sheets("社員").PrintOut Range("会社") = Range("会社") + 1 Loop シート名を Sheets("社員") としているわけで、Range("会社")や Range("至")は、どこにあるものでしょうか。コードがあやふやすぎます。VBAでは、Names オブジェクトといいますが、それは、テキスト型の文字列数式ですから、それ自体が、一旦インターフェースで翻訳されて、VBAに与えられるわけで、VBAでどう解釈しているかは分かりません。 PrintOut するにしても、範囲に対してするものだから、ActiveSheet.PageSetUp.PrintArea = [範囲のアドレス] で、PrintOut するのではないのかな?
- fujillin
- ベストアンサー率61% (1594/2576)
こんばんは。 あまり時間がないので・・・ >エラーが出るわけではなくて、「印刷中」という表示のまま ご提示のマクロだと、マクロからは「印刷中」という表示はでないはずなのですが、システム側の設定で表示がでるのでしょうか・・・? 多分、マクロは印刷命令を実行中に、印刷が終了できない状態(データを送り終われない)でずっと待っているという事態に陥っているのではないかと推測されます。 いずれにしろ、そのPC固有のトラブルのように見受けられます。(これまでの情報だけでは確定できませんが) プリンタドライバかシステムのどこかがおかしくなったとか・・ この辺に関しては、まったく無知なのでなんともわかりかねます。(すみません) どなたか詳しい方からの回答をお待ちします。
- fujillin
- ベストアンサー率61% (1594/2576)
ご質問文だけではマクロが止る理由は判断できませんが、エラーが出て停止するわけではないのですよね? (エラーがでるのであれば、それが大きなヒントになります。) プリンターからビジー信号が返った時の処理がおかしくなって実行待ちのままとか、他のマクロが動いていて何か干渉しているとか・・・ (カウンターに使用しているセルがRange("会社") という名前なので、どうも気にはなりますが) 最近、機器関連で環境が変わったようなことはないのでしょうか? >残業用紙を名前と部署だけ変えて印刷するために、 この部分でなにかトラブルが起きている可能性はありませんか? 参照している表などがおかしくなっているとか・・・ 別ブックを参照していてその位置が動いているとか・・・ この処理を関数や式で行っているのか、あるいはこちらもマクロで行っているのかなどということも関連してきそうですね。 上記のマクロのどこで止るかを確認するには、VBエディターの画面を開いて、1ステップずつ実行してどこで止るか確認してみるとか、いろいろ方法は考えられますが、対処するのに多少はマクロの知識が必要となりそうです。
お礼
早速のご回答有難うございます。 エラーが出るわけではなくて、「印刷中」という表示のまま固まってしまいます。 ためしにデータだけを送って違うパソコンで実行したところ、普通に印刷できました。 ということは、マクロ自体は大丈夫ということでしょうか。 パソコンに何か不具合があるのでしょうか? ちなみに、印刷できなかったPCから2種類のプリンタに印刷を試してみましたが、2種類ともだめでした。 >プリンターからビジー信号が返った時の処理がおかしくなって実行待ちのまま・・・ これはどうやって確認したらよいのでしょうか?