ぼんやりメモリー

日々感じたことやなるほど!などを、ぼんやりと残そうかな~

エクセルの困った仕様。プリンター設定が変更されてしまう!

 

ご無沙汰をしております、ぼんやりジジィです。お元気でいらっしゃいますか?

嘱託の身でありながら忙しく働かせていただいており、ブログの存在もすっかり忘れておりました。

 

会社での仕事の効率化ということで、手書きで行っていた伝票類をエクセルを使用して機械的に発行・管理しましょうということを行っていたのですが、そこで発生したのが

 

エクセルの困った仕様。プリンター設定が変更されてしまう!

 

という問題です。環境としては複数台のプリンター設定がある方が主に対象となりますが、プリンター1台のみでお使いにならている方にも関係します。(機械的なプリンターではなくファイル上でのPDF発行でもこの問題は発生するからです)。

 

今日は備忘録を兼ねておりますので、手短かに書かせて頂きます。

 

どんな現象なの?

同じ種類のOffice製品(特にエクセル)を複数同時に開くと、最初のファイルに設定していたプリンター名が、後から開いていたプリンター名で書き換えられてしまう。

 

もっと具体的に言ってよ!

今、Aという名前のエクセルで作業をしていました。これはEPSONのプリンターで印刷しながら作業をしていました。


そこに資料を探すのにBという名前の同じエクセルを同時に開いて、CANONのプリンターで印刷をしました。


そして開いたままの最初のAエクセルに戻って作業を続け、いざ印刷すると本来EPSONで印刷しなければならないのに、意図せずCANONのプリンターで印刷されてしまう(設定していたプリンター名が書き換えられてしまう)というものです。


この現象が起きる最大の要因は同じ種類(エクセルやワード)のアプリを同時に開いた場合に発生します。尚、後から開いたBファイルは開いていても閉じていても関係なく、このプリンター設定書き換え問題は発生します。

 

特に今回、弊社が発行する伝票類はパンチ穴・ミシン目付の専用用紙ですので、本来のプリンター設定が意図せず変わってしまうことは絶対NGなのです。

当初は変更されると困るこの特定ファイルの時だけ、エクセルVBAでプリンター指定をすれば問題ないと軽く考えていたのですが、弊社の場合増設した”用紙カセット2”を指定しなければならず、自分の知識ではこのカセット2の指定が突破出来ず、EPSONさんに問い合わせをしているのですが、とりあえずプリンター変更監視コードを忍び込ませることで、プリンターが変わったことを知り、元に戻すことで皆が幸せになれましたので、下にコード書いておきます。(細かい部分は環境に合わせて変更してください)

尚、このコードに対する責任は一切取れませんので、以降の現象は自己責任でと、一応謳っておきます。

 

【エクセルVBA

Dim originalPrinterSetting As String
Dim isFirstActivation As Boolean

Private Sub Workbook_Open()
    ' ワークブックが開かれた時点でのプリンタ設定を保存
    originalPrinterSetting = Application.ActivePrinter
    ' 初回のアクティベーションを示すフラグを設定
    isFirstActivation = True
End Sub

Private Sub Workbook_Activate()
    ' 初回のアクティベーションの場合、メッセージボックスを表示せずフラグをリセット
    If isFirstActivation Then
        isFirstActivation = False
        Exit Sub
    End If

    ' ワークブックがアクティブになったときに、プリンタ設定が変更されているかチェック
    If Application.ActivePrinter <> originalPrinterSetting Then
        MsgBox "プリンターの設定が変更されました!!" & vbNewLine & "印刷ダイアログボックスが開きますので設定確認してください" & vbNewLine & " プリンター名:EPSON LP-S3000" & vbNewLine & " 給紙装置:用紙カセット2です。" & vbNewLine & "" & vbNewLine & "設定確認後は【閉じる】もしくは【キャンセル】ボタンをクリックして下さい。" & vbNewLine & "【OK】を選択すると印刷が実行され画面がクリアされます!", vbExclamation
        ' メッセージボックスがOKで閉じられた後、印刷ダイアログボックスを表示
        Application.Dialogs(xlDialogPrint).Show
        ' 必要に応じてプリンタ設定を元に戻す
        ' Application.ActivePrinter = originalPrinterSetting
    End If
End Sub

 

【動作】
1.最初に開かれた(監視したい)エクセルのプリンター設定を読み込みます
2.後から開かれたエクセルのプリンター設定を読み込みます
3.最初のエクセルに戻った時に後から開かれたエクセルのプリンター設定と違った場合はメッセージボックを画面に表示し注意喚起します。
4.メッセージボックスのOKボタンがクリックされたら、印刷ダイアログボックスを表示します。(必要部分をユーザーが変更し、閉じるボタン)
5.最初に開いた時の1回だけ、この監視はスキップします。

 

【エクセルVBA苦手な方への手順】

1.プリンター変更監視をさせたいエクセルファイルを開く

2.Altキーを押しながらF11キーを押してVBA画面を表示させる

3.左側ペインの該当するファイルの「ThisWorbook」上で右クリック

4.挿入➡標準モジュール選択

5.右側に空白なウィンドウが表示されますので、上記コードをコピペ

6.VBA画面閉じたら終了、動作確認してください。

 

これで、いくらかでもお役に立てれば幸いでございます。

 

6/19月曜に3回目の加齢黄斑変性の硝子体注射してきました、上記の作業などもあり、眼を酷使していて、状態に関しては一進せず一退で、来月少し強めの薬の注射を試みることになりました。皆様眼はお大事に!

 

今日も良い1日になりますように!