Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10全般 : Excel 2019)
Excelで入力したデータをWordにおこして印刷
投稿日時: 22/05/27 22:31:54
投稿者: 猫飼い

こちらの掲示板を初めて利用します。
当方、Excelに関してかなりの初心者です…
 
 
Excelにデータを入力後にマクロを実行したときの挙動ですが、
 
Word立ち上げる→作成済みテンプレートのWordにExcelで入力したデータを反映→印刷まで行う
といった内容で、
 
現在は一つのパソコンから印刷しておりますが、
それを全てのパソコンから同じプリンターで印刷を行いたいのです。
 
ネットで検索していくつかの方法を試してみましたが上手くいかず…お力添えいただけたら幸甚です。
 
 
↓プリンター設定の記述にかかわる変数の宣言の内容です
 
 
Dim wdapp As Word.Application
Dim wddoc As Word.Document
 
↓下記がプリンター設定の記述です
 
 
'カラー出力設定のプリンタに変更
wdapp.ActivePrinter = "カラー ステープル"
 
Sleep 3000
 
wddoc.PrintOut
 
Sleep 3000
 
'プリンタを元に戻す
 
wdapp.ActivePrinter = ActivePrinter_name
 
 
 
こちらのマクロを作成した方は既に退社しており、社内でマクロに関し造詣が深い方がもういません。みなさんのお力を借りたいです…
 
初心者の私が抜粋して記したため、かなり情報不足かと思われます。
解決のために足りない情報がありましたらその際またお伝えします。
よろしくお願いします。
 
 

回答
投稿日時: 22/05/27 22:49:12
投稿者: simple

ご質問はプリンターの設定ということですね。
でしたら以下のようなことではないですか?
 

    '↓プリンター設定の記述にかかわる変数の宣言の内容です
    Dim wdapp As Word.Application
    Dim wddoc As Word.Document
    Dim ActivePrinter_name As String
    
    '(前略)
    
    ActivePrinter_name = wdapp.ActivePrinter    '現在のプリンター名を記憶
    '↓下記がプリンター設定の記述です
    'カラー出力設定のプリンタに変更
    wdapp.ActivePrinter = "カラー ステープル"

    Sleep 3000
    wddoc.PrintOut
    Sleep 3000
    'プリンタを元に戻す
    wdapp.ActivePrinter = ActivePrinter_name    '元のプリンター名を復旧

投稿日時: 22/05/28 00:15:11
投稿者: 猫飼い

 
>simpleさん
 
ご回答ありがとうございます。
そうです!記述された内容は確かにそのような内容です。
 
 
wdapp.ActivePrinter = "カラー ステープル"
 
こちらの"カラー ステープル"の中身に
"RICOH Pro C5200S JPN RPCS on Ne00;"のようなプリンタ・ポート名を入れれば
普段使っているPCとは違うPCで印刷はできましたが、ポート名まで記入してしまうと
一つのPCからしか印刷ができず…
そのプリンタに接続ができている全てのPCから印刷を可能にする記述を行いたいのです。
 

回答
投稿日時: 22/05/28 13:58:50
投稿者: WinArrow
投稿者のウェブサイトに移動

プリンターポート名
>"RICOH Pro C5200S JPN RPCS on Ne00;"のようなプリンタ・ポート名
の「Ne00」のところがPCによって違うことはないでしょうか?

回答
投稿日時: 22/05/28 17:15:09
投稿者: simple

会社のなかのしかるべき人に確認してください。環境依存の話ではないですか?
共有プリンターを同時に使っても、普通はキューとしてたまって、順次印刷がされるはずです。
ExcelVBAの話ということでもないような気がします。

回答
投稿日時: 22/05/28 18:27:54
投稿者: MMYS

Wordでプリンタの切り替えをマクロの記録を取ると、下記のコードです。

Sub Macro1()
'
' Macro1 Macro
'
'
    ActivePrinter = "LBP7100Cn"
End Sub

Sub Macro2()
'
' Macro2 Macro
'
'
    ActivePrinter = "Canon MF644C Fax"
End Sub

Excel-VBAと違い、Word-VBAでは、ポート指定が見当たりません。
 
Excel-VBAでは、各マシン固有の、「Ne00」とポート指定が必要ですが、
Word-VBAでは、Word側の仕様で、ポート設定は無いのでしょう。
 
よって、マクロの修正は一切必要ありません。
 
各PCで、プリンタ名を"カラー ステープル"という名前の、同じプリンターをもう一つ登録して印刷設定すれば、完了です。
 

投稿日時: 22/05/28 20:11:01
投稿者: 猫飼い

 
>WinArrow さん
 
ご回答ありがとうございます。
確かにPCによってNe00 の数字は異なります。
 

投稿日時: 22/05/28 20:13:14
投稿者: 猫飼い

 
>simple さん
一度、社内で機器に詳しい方に聞いてみます。
ありがとうございます。

投稿日時: 22/05/28 20:16:57
投稿者: 猫飼い

 
>MMYS さん
 
ご回答ありがとうございます。
マクロはそのままで、PCのプリンター名を共通の名前に設定してみます。
 

回答
投稿日時: 22/05/29 10:23:38
投稿者: WinArrow
投稿者のウェブサイトに移動

Wordの場合、ポート番号は省略する
ということを、すっかり忘れていました。
 
なお、ポート番号は、指定しなくても、間違って指定しても、機能するようです。
 
プログラム内にプリンタ名を固定的に定義するのではなく、
実行時にオペレータに選択させる方法もあります。
将来、プリンタ更新、または、別プリンタに切替てテストするなど、
汎用性が広がるものと思います。
 
コードを紹介します。
 
なお、目的の印刷終了後、元のプリンタに戻す場合は、事前にセーブしておきましょう。
 

Sub プリンタ切替()
Dim ActPrinter As String

    ActPrinter = ActivePrinter
    Application.Dialogs(xlDialogPrinterSetup).Show
    '
    '目的の印刷処理
    '
    '
    ActivePrinter = ActPrinter

End Sub

 

回答
投稿日時: 22/05/29 11:25:43
投稿者: MMYS

WinArrow さんの引用:

コードを紹介します。

試したわけでは、ありませんが、提示のコードだと、Excel側のプリンタを切り替えているだけで、Word側からの印刷は、「通常使うプリンタ」に印刷されると思います。
  
今回のケースはWordインスタンスで、アクティププリンタを切り替えかが、必要と思いますが。
質問初稿でも、下記のようにWordインスタンスを指定してます。
 
'カラー出力設定のプリンタに変更
wdapp.ActivePrinter = "カラー ステープル"

 

回答
投稿日時: 22/05/29 13:43:40
投稿者: WinArrow
投稿者のウェブサイトに移動

MMYS さんの引用:

試したわけでは、ありませんが、提示のコードだと、Excel側のプリンタを切り替えているだけで、Word側からの印刷は、「通常使うプリンタ」に印刷されると思います。

 
MMYSさん、ご指摘ありがとうございます。
おっしゃる通りです。
WordのActivePrinterには、反映されません。
だいぶ手抜きをしてしまいました。
 
最初、私がいつも使っている下記のコードを紹介するつもりでしたが、
もっと簡単にできないかと思った時点で、手を抜いてしまいました。
 
どうもすみませんでした。
 
Public Function GetPrinter()
Dim objWSH As Object
Dim objPrinter As Object
Dim sPrinterlist()
Dim sTemp1 As String
Dim sTemp2 As String
Dim i As Long
Dim ctr As Long

Const SUB_ROOT = "Software\Microsoft\Windows NT\CurrentVersion\Devices"
    Set objWSH = CreateObject("WScript.Network")
    Set objPrinter = objWSH.EnumPrinterConnections
    If objPrinter.Count < 2 Then
        MsgBox "プリンタを取得できません", vbExclamation
        GoTo Exit_Proc
   Else
        ctr = 0
        For i = 0 To objPrinter.Count - 1 Step 2
            ReDim Preserve sPrinterlist(ctr)
            sPrinterlist(ctr) = objPrinter(i + 1)
            ctr = ctr + 1
        Next
    End If
    For i = 0 To ctr - 1
        sTemp1 = sPrinterlist(i)
        sTemp2 = RegRead_API(HKEY_CURRENT_USER, SUB_ROOT, sTemp1)
        sPrinterlist(i) = sPrinterlist(i) & " On " & Mid$(sTemp2, InStr(sTemp2, ",") + 1)
    Next
    GetPrinter = sPrinterlist

Exit_Proc:
    Set objPrinter = Nothing
    Set objWSH = Nothing
End Function

 
この関数では、実行環境に登録されているプリンターを取得しています。
この関数の戻り値を、入力規則でも、ドロップダウンリストでも、セットして
オペレータに選択させて、選択結果を
wdApp.ActivePrinterにセットすればよいです。
ポート番号付きとなっていますが、前レスにも書きましたが、
ポート番号があってもなくても同じです。
気になるようでしたら、除いてください。
 

トピックに返信