プリンター設定で問題が発生?

このQ&Aのポイント
  • 昨日のプリンターの件です。プリンターを変えたところ、「設定がうまくいきませんでした」と出てきますが、プリントは出来ています。プリンターの設定に問題があるのでしょうか?
  • プリンターを変更すると「設定がうまくいきませんでした」というエラーメッセージが表示されますが、プリントはできています。問題の原因はプリンターの設定ですか?
  • プリンターを別のものに変えたところ、プリントはできるものの「設定がうまくいきませんでした」というエラーメッセージが表示されます。プリンターの設定に問題があるのでしょうか?
回答を見る
  • ベストアンサー

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

下記のようなことを記入してよいか迷ったのですが、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 の場合)

  • npsw
  • お礼率33% (35/103)

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。 >ポート自体ですが、PCの間で、変わってしまうことがあるのですね。 一旦、ActivePrinter に与える書式さえ決まれば、後は、ポート自体は、そのマクロで探してくれるはずです。こちらでは、その書式が分からないのです。 そのプリンタドライバが持ついくつかのスタイルは、実際のプリンタがないとこちらでは、今の私では、取ることが出来ません。前回、マクロで出来たように、それが、今回も、出来ないわけではありません。 いろいろプリンタが変わるなら、一旦、仮に取った、ActivePrinter の書式を、コンボボックスやリストボックスで登録して、選んで上げさえすればよいわけです。ポートの数字が変わるのですが、そのポートを総当たり制で当てて、通ればよいだけなのです。至って単純な仕組みなのです。どうか、ご理解ください。

npsw
質問者

お礼

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

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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:" と「:」コロンが入るのかどうか、そういうところは、ご自身で調整していただかないといけません。

npsw
質問者

お礼

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

npsw
質問者

補足

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

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

npsw
質問者

お礼

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

npsw
質問者

補足

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

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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") & ":" ------------------------------------------------- 最後の(:)が必要かどうかは、今は分かりません。こういう風に換えていただかないといけないと思います。 もし、他に入れるような型にするなら、コードを書き換えなくてはなりません。

npsw
質問者

補足

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

関連するQ&A

  • [と”の意味を教えてください。

    http://okwave.jp/qa/q5945112.html を参考に、 Sub test1() Dim i As Integer i = 2 If i Like "[1-3]" Then MsgBox i & "です" End If End Sub Sub test2() Dim i As Integer i = 2 If i Like "[1-5]" Then MsgBox i & "です" End If End Sub Sub test3() Dim i As Integer i = 2 If i Like "[1-10]" Then MsgBox i & "です" End If End Sub を作ったのですが、 test3はうまく行きません。 意味としては、 iが "[1-10]"の中の数字の間のどれかであれば、 MsgBox i & "です" を表示させたいです。 でも上記のマクロを実行させた結果、 "[1-10]"の中で計算が行われてるのではないかと思います。 だから、test3は、1-10=-9 という事になり、msgboxが反応しないのではないかと思っています。 でもそうすると、test2だって "[1-5]"は、-4になって、i=2とは違う値なのに なぜMsgBoxが反応してしまうのかわかりません。 でもそもそも[と”の意味が分からないのでそこから教えていただけませんか? “の意味、は二つで挟んで文字列にすると思っています。

  • 「1から5の間なら」とするには?

    「1から5の間なら」とするには? エクセルvbaです。 Sub test1() Dim i As Integer i = 1 If i = 1 Or i = 2 Or i = 3 Or i = 4 Or i = 5 Then MsgBox "1-5までのどれかです" End If End Sub は、最大でも5なので手入力でできますが、 これが1から100までならor演算子で繋ぐのは大変なので Sub test2() Dim i As Integer i = 1 If i = [1-5] Then MsgBox "1-5までのどれかです" End If End Sub みたいなことをやりたいのですが、うまくいきません。 デバッグしてもエラーにもなりません。 自分でコードを書いといて聞くのもおかしいですがtest2の意味と、表題の方法を教えてください。 よろしくお願いします。

  • REALbasicについて質問です。

    今日プログラミングをはじめた超初心者です。 全然わからないので教えていただきたいのですが Sub Action () dim x as string dim y as integer x = editField1.text y = val(x) if y = 0 then msgbox "ゼロだよん。" else msgbox "ゼロじゃないよん。" end if End Sub というプログラムを実行してみたのですがeditField1のところがおかしいらしく動いてくれません。どのようにしたらよろしいでしょうか?

  • Excel VBAで別ブックのマクロから配列を取る

    Excel VBAで別ブックのマクロで計算した結果を配列で渡したいのですが、上手い方法が見つかりません。 同じブック内であれば、 Function GetAry(Imax As Integer, ByRef MyAry As Variant) as Boolean のような関数を作れば、GetAry = True の時に返値の MyAry が有効であるという判断ができますが、この関数を別ブックから使う場合は、参照渡しができません。 これはVBAの仕様なので仕方ないとして、以下のようなマクロを組んでみました。 '------------------------------------------------------- ' Book1.xlsm(呼び出される側) '------------------------------------------------------- Function MyAry(Imax As Integer) As Variant Dim i As Integer Dim SubAry() As Variant If Imax > 10 Then MyAry = False Else For i = 1 To Imax ReDim Preserve SubAry(i) SubAry(i) = i Next MyAry = SubAry End If End Function '------------------------------------------------------- ' Book2.xlsm(呼び出す側) '------------------------------------------------------- Sub GetMyAry() Dim DataAry As Variant Dim Imax As Integer Imax = 11 DataAry = Application.Run("Book1!MyAry", Imax) If DataAry <> False Then MsgBox UBound(DataAry) Else MsgBox DataAry End If End Sub '------------------------------------------------------- Imax = 11 であれば、メッセージボックスに False が表示されますが、Imax = 10 だと当然ですが「型が一致しません」というエラーになります。 エラートラップで誤魔化そうかとも思ったのですが、もっとスマートな方法がないでしょうか。 よろしくお願いします。

  • 下記のマクロをもっと早くするには?

    下記のマクロは、 A列にあるURLがSSL化(https)されているかを調べるものです。 このマクロを動かすと、大体3秒に1つのURLを調べるくらいの早さです。 もっと早く調べられるようにするには、どのような記述にすればできるでしょうか? また、エクセルの他の設定で、マクロを早くできたりしますか? よろしくお願いいたします。 Sub SSL() Dim objHttp As Object Dim nURL As String Dim strURL As String Dim i As Long, f As String, l As String Dim Lastrow As Long, getLine As Long Set objHttp = CreateObject("WinHttp.WinHttpRequest.5.1") On Error GoTo ErrHandler 'A1から getLine = Cells(Rows.Count, 2).End(xlUp).Row Lastrow = Cells(Rows.Count, 1).End(xlUp).Row If getLine = Lastrow Then MsgBox "既に終わっているか、データがないです。", vbExclamation: Exit Sub If getLine < Lastrow And Cells(1, 2).Value <> "" Then getLine = getLine + 1 Else getLine = 1 '最初の行が1行目からの場合 End If For i = getLine To Lastrow strURL = LCase(Trim(Cells(i, 1).Value)) 'A列の登録URL strURL = Replace(strURL, "https:", "http:") If strURL Like "http*" Then objHttp.Open "GET", strURL, False objHttp.send DoEvents 'ESC割り込み可能にする With objHttp If .Status = 200 Then nURL = .Option(1) 'WinHttpRequestOption_URL f = Mid(strURL, 1, InStr(strURL, "://")) l = Mid(nURL, 1, InStr(nURL, "://")) If nURL = "" Then Cells(i, 2).Value = "no URL" ElseIf nURL <> "" Then If LCase(f) = LCase(l) Then Cells(i, 2).Value = "non SSL" Else Cells(i, 2).Value = "https" End If End If Else Cells(i, 2).Value = "Err:" & .Status End If End With End If Endline: nURL = "" strURL = "" Next i MsgBox "Finished" Exit Sub ErrHandler: If Err() <> 0 Then Cells(i, 2).Value = Err.Number 'マイナスになるのは外部エラー GoTo Endline End If End Sub

  • iと言う変数の値が1から10の間にないならば

    「iと言う変数の値が1から10の間にないならば」、としたいのですが どのようなコードを書けばいいのでしょうか? Sub test1() Dim i As Integer i = 11 If 1 < i < 10 Then MsgBox i & "は1から10の間にはありません" End If End Sub だと、メッセージが表示されてしまいます。

  • 小数点以下表示

    averageで計算した値を表示したところ、 勝手に四捨五入されてしまいました 小数点第二位まで表示したいので どなたかよろしくお願いいたします<m(__)m> Option Explicit Public Sub 平均() Const SH_NAME As String = "VBA" Dim art As String Dim i Dim ws As Worksheet Dim endrow As Long Dim msg As String Dim writerow As Integer Dim target As Range Dim ActCell As Variant Dim Result As Integer Set ws = ThisWorkbook.Worksheets(SH_NAME) writerow = 2 art = InputBox("日付を入力してください") With ws endrow = .Cells(Rows.Count, 2).End(xlUp).Row For i = 2 To endrow If art = .Range("A" & i) Then If target Is Nothing Then Set target = Range("D" & i) Else Set target = Union(target, Range("D" & i)) End If Else If InStr(msg, .Range("A" & i)) = 0 Then msg = msg & .Range("A" & i) & vbCrLf End If End If Next i If msg <> "" Then MsgBox msg End If target.Select ActCell = Selection.Address Result = Application.WorksheetFunction.Average(.Range(ActCell)) Range("F39").Value = Result Range("F39").NumberFormatLocal = "0.00" End With End Sub

  • VBAでExcelファイルのPDF自動化

    表題の通りの事をしたいと思っています。とあるサイトで参照したvbaコードで、デスクトップにファイルをExcelのブック名と同じ名前でPDFに変換するところまで出来ました。あと自動でやりたいことは2つあり、(1)とあるセルの情報を読み込み保存名にしたい【○○○.pdfという具合に】、(2)生成したpdfファイルの保存先をマクロ内に設け指定したいです。【\\サーバー名\○○\△△\□□などのように】 現状までのコードを表記します。わかる方いらっしゃいましたら、お手数ですがアドバイスお願いします。 自分はマクロは手を出したばかりで、初心者です。宜しくお願いします。 Sub pdf() Dim i As Integer Dim s_prn As String, oldprn As String, flg As Boolean On Error Resume Next s_prn = "Adobe PDF" 'インストールされているPDFプリンタの名前 oldprn = ActivePrinter 'アクティブプリンタを取得 If InStr(oldprn, s_prn) = 0 Then '切替えたいプリンタがアクティブプリンタでない場合 flg = False 'プリンタ切替フラグ For i = 0 To 99 ActivePrinter = s_prn & " on Ne" & Format(i, "00") & ":" '「"プリンタ名"on NeXX:」形式PC用 ActivePrinter = "Ne" & Format(i, "00") & ": の " & s_prn '「NeXX: の "プリンタ名"」形式PC用 If ActivePrinter <> oldprn Then flg = True 'プリンタ切替成功 Exit For End If Next i If flg = False Then 'プリンタ切替失敗の場合 MsgBox "プリンタ名:" & s_prn & " が見つかりません。" Exit Sub End If End If ActiveSheet.PrintOut ActivePrinter = oldprn 'アクティブプリンタを元に戻す MsgBox "終了しました。" End Sub

  • VBA:カウンターの i の値が開放されなくて困っています。

    以下のコードを実行する度に、カウンター i の値がリセット(開放)されずに積算されて困っています。なぜか教えて下さい。宜しくお願い致します。 以下のコードは、簡単に言えばcsvファイルをカウンター i で数えています。したがって、少なくともCSVファイルを一つ作成して実行して下さい。 Option Explicit Dim FiName As String, FoName As String Dim EachFiName As String Dim i As Integer Sub Test() MsgBox i '二回目にこのコードを実行するとiが積算されます。 FiName = Application.GetOpenFilename If FiName = "False" Then Exit Sub Else If Right(FiName, 3) <> "csv" Then MsgBox "Chose a CSV file." Exit Sub End If End If FoName = Left(FiName, InStrRev(FiName, "\", -1, vbTextCompare)) EachFiName = Dir(FoName & "*.csv") Do While EachFiName <> "" i = i + 1 EachFiName = Dir() Loop End Sub

  • データの取り込み

    VB6.0 SQLSERVER で開発しています。  EXCELにあるデータをSQLへ取り込みたいのですが 下記のようにすると取り込めるのですが EXCELに空白があるとエラーが出ます。 教えてください。  Dim strSQL As String Dim adoRsWork As ADODB.RecordSet Dim exl As Object Dim i As Integer Dim k As Long Dim mds As Boolean Dim rs As Variant Dim j As Integer Dim s As String Dim ct As Long Dim fno As Integer Dim fnm As String strSel1 = "SELECT" strSel1 = strSel1 & " A.品番" strSel1 = strSel1 & ",A.品名" strSel1 = strSel1 & ",A.倉番" strSel1 = strSel1 & ",A.数量" strFro1 = " FROM " strFro1 = strFro1 & " A_zaiko AS A" strSQL = strSel1 & " " & strFro1 Debug.Print (strSQL) Set adoRsWork = pbAdo.OpenRecordset(strSQL) Set exl = CreateObject("Excel.Sheet") mds = True fnm = "C:\Documents and Settings\デスクトップ\159.xls" j = adoRsWork.Fields.Count - 1 ReDim ctyp(j) As Boolean For i = 0 To j Select Case adoRsWork(i).Type Case 131, 139 ctyp(i) = True Case Else ctyp(i) = False End Select Next adoRsWork.Close Set exl = CreateObject("Excel.Application") exl.Application.Visible = True exl.Application.Workbooks.Open FileName:=fnm k = 1 If mds Then k = 2 End If gSvrADOActiveconnection.BeginTrans On Error Resume Next For k = k To 65536 s = "" If exl.Cells(k, 1) = "" Then Exit For For i = 0 To j If ctyp(i) Then s = s & "," & exl.Cells(k, i + 1) Else s = s & ",'" & exl.Cells(k, i + 1) & "'" End If Next s = Mid(s, 2) strSQL = "insert into " & strFro1 & " values (" & s & ")" pbAdo.OpenRecordset (strSQL) If Err <> 0 Then gSvrADOActiveconnection.RollbackTrans Close fno adoRsWork.Close MsgBox "更新エラー" & Chr(10) & Err & ": " & Error _ & Chr(10) & ct + 1 & " 件目に問題あり" _ & Chr(10) & strSQL End End If ct = ct + 1 Next gSvrADOActiveconnection.CommitTrans On Error GoTo 0 exl.Application.DisplayAlerts = False exl.Application.Quit adoRsWork.Close

専門家に質問してみよう