こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

昨日のプリンターの件です

下記のようなことを記入してよいか迷ったのですが、wendy02さん、教えてください。
下記のように、プリンターを変えたところ、「設定がうまくいきませんでした」と出てきます。
何か、間違っていますでしょうか?但し、プリントは出来ました。
Dim OldPrt As String
Dim ActPrt As String
Dim i As Integer
Dim errFlg As Integer
OldPrt = Application.ActivePrinter
ActPrt = "\\FMV-DESKPOWER\EPSON PM-4000PX on USB002"
ActPrt = Trim(ActPrt)
On Error Resume Next
For i = 0 To 4
Application.ActivePrinter = ActPrt & " on Ne" & Format$(i, "00") & ":"
If Err.Number > 0 Then
errFlg = Err.Number
Err.Clear
Else
errFlg = 0
Exit For
End If
Next i
ActPrt = Application.ActivePrinter
On Error GoTo 0
If ActPrt = OldPrt Then
If errFlg > 0 Then
MsgBox "設定がうまく行きませんでした", 48
Else
MsgBox "設定はそのままで、使えます。", 64
End If
ElseIf errFlg = 0 Then
MsgBox "正しく設定されました: " & Application.ActivePrinter
End If
''印刷(Excel の場合)

投稿日時 - 2008-03-25 11:47:57

QNo.3892979

暇なときに回答ください

質問者が選んだベストアンサー

こんばんは。

>ポート自体ですが、PCの間で、変わってしまうことがあるのですね。

一旦、ActivePrinter に与える書式さえ決まれば、後は、ポート自体は、そのマクロで探してくれるはずです。こちらでは、その書式が分からないのです。

そのプリンタドライバが持ついくつかのスタイルは、実際のプリンタがないとこちらでは、今の私では、取ることが出来ません。前回、マクロで出来たように、それが、今回も、出来ないわけではありません。

いろいろプリンタが変わるなら、一旦、仮に取った、ActivePrinter の書式を、コンボボックスやリストボックスで登録して、選んで上げさえすればよいわけです。ポートの数字が変わるのですが、そのポートを総当たり制で当てて、通ればよいだけなのです。至って単純な仕組みなのです。どうか、ご理解ください。

投稿日時 - 2008-03-28 23:27:55

お礼

本当にいろいろありがとうございました。
私もどのように質問し、何を質問材料にして良いかわからず、申し訳ありませんでした。
これに懲りず、また教えてください。

投稿日時 - 2008-04-01 17:28:00

ANo.4

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

こんばんは。

その調整というのは、一旦、プリンタの変更をした後に、

Debug.Pring Application.ActivePrinter

などでとって、それを、

ActPrt 以降に
ActPrt = "\\FMV-DESKPOWER\EPSON PM-4000PX on USB002"
     ------------------------------------------
と反映させてあげるのです。

今回のマクロは、単に、ポートの選択をマクロで「総当たり制」で当てるだけのもので、そのポート自体を探し出す能力はありません。

 For i = 0 To 4
また、ここの部分が、4で良いのかは、その状況を見ながらしていただかないといけません。


また、語尾に、

"\\FMV-DESKPOWER\EPSON PM-4000PX on USB002:"
と「:」コロンが入るのかどうか、そういうところは、ご自身で調整していただかないといけません。

投稿日時 - 2008-03-26 21:58:10

補足

ありがとうございました。
ポート自体ですが、PCの間で、変わってしまうことがあるのですね。
いつも同じであれば、Ne04とかNe03など一度プログラムに入れてしまえば、OKなのに、数日立つと変わってしまい、またプログラムを見直さなくてはならないのが現状です。
どうしても印刷用紙と白紙用紙の両方をいつのプログラム(エクセル)でsheet(1.2)によって使い分けをしているので困っていたのです。
いろいろとありがとうございました。
ポートを探し出して、自動で印刷が出来ないと、教えて頂いただけでも、私には幸運でした。

投稿日時 - 2008-03-27 15:21:09

お礼

いろいろと、大変なことをお願いしまして、ありがとうございました。

投稿日時 - 2008-03-27 15:29:13

ANo.2

こんばんは。

\\192.168.10.11\ ←ネットワークのIPアドレスです。

文字と、IPアドレス自体は、意味的には、同じですね。192.168.0.0~192.168.255.255の範囲が、プライベートのネットワークという意味ですね。

それはともかくとして、多少の汎用性を持たしてみました。
なるべく、記録マクロで取ったものを、そこに当ててください。語尾に、「:」が入るのか入らないのかはっきりしませんが、入るものと前提にしてあります。


Sub ChangeActPrinter2()
  Dim OldPrt As String
  Dim ActPrt As String
  Dim i As Integer, j As Integer
  Dim n As Integer, m As Integer
  Dim v As Variant
  Dim errFlg As Integer
  
  v = ":" '語尾

  '設定
  ActPrt = "\\FMV-DESKPOWER\EPSON PM-4000PX on USB002"

  OldPrt = Application.ActivePrinter  
  If StrComp(OldPrt, ActPrt, vbTextCompare) = 0 Then
     MsgBox "設定はそのままで、使えます。", 64
    Exit Sub
  End If
  If StrComp(Right(ActPrt, 1), v, vbTextCompare) = 0 Then
  '末尾に、":"が入っていた場合
    ActPrt = Mid$(ActPrt, 1, Len(ActPrt) - 1)
  End If
  For j = Len(ActPrt) To 10 Step -1
   If Not Mid(ActPrt, j, 1) Like "#" Then
    n = Len(ActPrt) - j
    Exit For
   End If
  Next j
  If n = 0 Then
   MsgBox "プリンタ名の末尾には、予め取得したポート番号が必要です。", 48
   Exit Sub
  End If
  ActPrt = Trim(ActPrt)
  ActPrt = Mid$(ActPrt, 1, Len(ActPrt) - n)
  On Error Resume Next
  For i = 0 To 4
    Application.ActivePrinter = ActPrt & Format$(i, String(n, "0")) & v
    ''MsgBox ActPrt & Format$(i, String(n, "0")) & v '確認のため
    If Err.Number > 0 Then
      errFlg = Err.Number
      Err.Clear
    Else
      errFlg = 0
      Exit For
    End If
  Next i
  On Error GoTo 0
  If errFlg > 0 Then
     MsgBox "設定がうまく行きませんでした。", 48
  Else
   MsgBox "正しく設定されました。: " & Application.ActivePrinter
  End If
  ''印刷 (Excelの場合)
  'ActiveSheet.PrintOut
End Sub

投稿日時 - 2008-03-26 01:55:47

補足

下記の条文を有効にしたところ、USB001をMSGした後、USB002を表示し、USB003/USB004と4つのMSGが出ます。その後、[設定がうまくいきませんでした]となります。
'MsgBox ActPrt & Format$(i, String(n, "0")) & v '確認のため

投稿日時 - 2008-03-26 17:21:23

お礼

いろいろとありがとうございます。
大変なプログラムを、お願いしてしまいまして非常に心苦しく思っております。
本来なら、すぐにでも作業を行い、結果なりをご報告しなくてはいけないと思っておりますが、現在出先のため、(営業マンであり申し訳ありません)会社の事務所に出たときに行いますので、それまで、まったく連絡が無いとお叱りにならないでください。
本当にありがとうございました。

投稿日時 - 2008-03-26 16:45:03

ANo.1

こんにちは。

>ActPrt = "\\FMV-DESKPOWER\EPSON PM-4000PX on USB002"

>下記のように、プリンターを変えたところ、「設定がうまくいきませんでした」と出てきます。

間違っているというよりも、昨日は、途中までだったような気がします。私は、プリンタは替えないと思っていたからです。やっぱり、プリンタ自体を換えるわけですね。本来は、ポート自体を取るということになるのですが、そんなコードは、面倒でしょうがないわけです。

それで、簡易型で済ませようとしたわけですが、やはり、きちんと説明しないといけないようです。

○Application.ActivePrinter = ActPrt & " on Ne" & Format$(i, "00") & ":"

この部分を注目してください。

-------------------------------------------------
ActPrt = "\\FMV-DESKPOWER\EPSON PM-4000PX on USB002"
     ↓
"\\FMV-DESKPOWER\EPSON PM-4000PX" & " on Ne" & Format$(i, "00") & ":"
-------------------------------------------------
では、
× "\\FMV-DESKPOWER\EPSON PM-4000PX on Ne 00:"

となって、違ってしまいますね。

ActPrt = "\\FMV-DESKPOWER\EPSON PM-4000PX on USB002"
でしたら、

おそらく、
-------------------------------------------------
Application.ActivePrinter = ActPrt & " on USB" & Format$(i, "000") & ":"
-------------------------------------------------

最後の(:)が必要かどうかは、今は分かりません。こういう風に換えていただかないといけないと思います。

もし、他に入れるような型にするなら、コードを書き換えなくてはなりません。

投稿日時 - 2008-03-25 12:03:18

補足

教えて頂いたように記述しましたところ、再度「設定がうまくいきませんでした」と出てきます。
オートマクロでプリンターを出したら、
'ActiveWindow.SelectedSheets.PrintOut Copies:=3, ActivePrinter:= _
' "Ne03: の \\192.168.10.11\EPSON PM-4000PX", Collate:=True
と、ここでは、FMVの文字が出ません。
しかし印刷中の画面では、FMVの文字が入ってきます。
この関係でしょうか?

投稿日時 - 2008-03-25 13:41:05

あなたにオススメの質問