2022年6月3日金曜日

エクセル2013以降では、ワードを併用しないとラベル印刷ができなくなったので、色々と苦労するでござる ー プリンター設定(VBA)

写真はイメージです
   
勤め先では、重たい機械を出荷するので、大型トラックに積み込んで出します。
安全に運べるよう、運搬中は、木枠に製品を載せて固定するようにするんだな。

設置先では使用のため固定しますが、木枠は運搬中の転倒を防ぐ一時的なもの。
この梱包にはビニール袋掛けをするのですが、ここに出荷シールを張り付ける。

タックシールの出荷伝票をPCから印刷して準備しますが、これが毎日の作業。
これまでは、製造基幹システムのアプリで印刷出力して来ましたが、問題発生。

出力内容と帳票のデザイン変更が必要になったのはいいが、電算担当者が難色。
プログラムを組む奴がいないらしく、代わりにVBAで組めないかとお鉢が回る。

これまで、VBAプログラムで色々と組んできましたが、印刷出力は初めてです。
まあ、プリンタ―制御も厄介で使用するプリンターを指定する必要が生まれた。

複数のプリンターがネットワークでつながるし、しかも手差し印刷の指定です。
このため、最初はブック立上がり時に、プリンターの選択コードを書いてみた。

ただ、毎回、選択は面倒だろうと考え直して、指定する方法に考え直しました。
この時、プリンター名を記述しますが、ウインドウズ内部の機器名が不明です。

なので、PCに接続された印刷機器一覧名を取得するコードを書いてみました。
そなんに大層なものではありませんが、役に立つかもしれないので紹介します。

Sub GetPrinterList()
Dim myShell As Object, myItem As Object
Dim PrinterList, K As Integer
  ReDim PrinterList(1 To 1)
    Set myShell = CreateObject("Shell.Application")
K = 0
  For Each myItem In myShell.Namespace(&H4).Items
    K = K + 1
      ReDim Preserve PrinterList(1 To K)
        PrinterList(K) = myItem.Name
          Range("A" & K).Value = myItem.Name
    'ワークシートに書き出す一覧取得
            Debug.Print myItem.Name
      'イミディエイトウインドウに書き出す一覧取得
  Next
End Sub

※タックシール印刷用のプリンター(出力されたリストの一例)
Hoge_FX DocuCentre-Ⅵ C5571(59.59) (XXX-1111-111.
                      hogehogedomain.local 上)

次にリストからピックアップしても、どこまで記述すればよいのか分からない。
試しに、後半のネットワーク情報が記述された括弧書きを省いて指定してみた。

すると、何事もなかったかのようにプリンターが指定されて印字できたんだな。
問題は、特定のトレイを指定したいときなんだけれど、これはエクセルからだ。

タブのコマンドで、ファイル⇒印刷⇒ページ設定⇒オプションまで先ず進める。
次に、プリンターのプロパティが表示されるので、ここで、手差しを指定する。

跡は各ウインドウの”OK”ボタンを押して設定を終えたら、ファイル保存だな。
手差し印刷の機能がブックに保存されますので、ブックを開けば手差し印刷だ。

実際のVBA構文は実に簡単で、1ページを印刷する場合、次の通りになります。
まあ、設定順番をイメージできるように、画像も作成したので参照して下さい。

クリックで拡大できるよ

Sub 特定プリンタ印刷()
ActiveSheet.PrintOut From:=1, To:=1, _
ActivePrinter:="Hoge_FX DocuCentre-Ⅵ C5571(59.59)"
End Sub

というわけで、プリンターを制御するコマンドも複雑多岐なのが分かった次第。
これも、実際に現場で使用するPCと接続プリンターの環境が、実際にコードを書いているPCの環境とは違うからで、いちいち、現場に出向いて動作確認を行いいながら、悪戦苦闘の日々の自分がいるのでした。



いいねと思ったら、三つポチっとね!
にほんブログ村 スキースノボーブログへにほんブログ村 スキースノボーブログ スキーへにほんブログ村 旅行ブログ 旅日記・旅の思い出へ
にほんブログ村    にほんブログ村      にほんブログ村 



0 件のコメント:

コメントを投稿