• 締切済み

EXCEL2007 VBAでのプリンタ切り替えについて

いつもお世話になっております。 EXCELで帳票出力をする場合にプリンタを切り替えて(通常使うプリンタを変更して) 行おうと、いろいろ調べまして下記のようなプログラムを作成して実行しました。 Dim OldPrinter As String OldPrinter = Application.ActivePrinter With CreateObject("WScript.Network") .SetDefaultPrinter "EPSON LP-6100" End With ~~~~印刷処理~~~~ Application.ActivePrinter = OldPrinter WSHによるデフォルトプリンタの切り替えはうまく行くのですが、その後に もともとの通常使うプリンタに戻す処理がうまくいかず、プリンタが切り替わったまま になってしまいます。 いろいろと調べましたが、わかりませんでした。 参考になるサイトなどでも構いませんのでお願いいたします。

みんなの回答

  • 98FAN
  • ベストアンサー率66% (4/6)
回答No.1

サイトはわからなかったんだけど、 試したら上手く切替出来たので、 これじゃだめかな? Dim OldPrinter As String Dim kariPrinter As String Dim mozisuu As Integer kariPrinter = Application.ActivePrinter mozisuu = Len(kariPrinter) - 9 OldPrinter = Left(kariPrinter, mozisuu) CreateObject("WScript.Network").SetDefaultPrinter "EPSON LP-6100" ~~~~印刷処理~~~~ CreateObject("WScript.Network").SetDefaultPrinter OldPrinter OldPrinterの中には『プリンター名 no Ne00:』と 不明な文字列『 no Ne00:』(スペースも入れて半角9文字)が入ってたんで、 その分文字列から除外してみただけなんだけど・・・ で、その不明な文字列に関してはGoogleで検索したら これが引っかかったんで参考までに http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1210564017

papope
質問者

お礼

ご回答ありがとうございます。 ポート名を削除する方法は私も考えたんですが、どのサイトでも Application.ActivePrinter = OldPrinter で変更できると書いてあったので、何か問題がるのか?と思い質問 させていただきました。 確かWordのVBAだと、この方法で変更できたように思います。 不思議です。 お教えいただいた方法で試してみます。 結果がでるまでお時間かかりますが、こちらでご報告いたします。 (できると思いますが)

papope
質問者

補足

結果報告です。 ポート名が9文字とは限らないみたいなので“on”以前をプリンタ名と して取得してやってみました。 できました。 ありがとうごじざいます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルVBA:perlで作成したexeが失敗する

    VBAプログラムで詰まってしまったので質問します。 perlにて自作したexeファイルをexcelのボタンから開きたいのですが、 実行の途中で止まってしまうようなのです。 止まってしまうexeファイルは、自分でダブルクリックして起動すると正常動作する為、 原因がわかりません。 'Declare Function ShellExecute Lib "shell32.dll" _ 'Alias "ShellExecuteA" ( _ 'ByVal hwnd As Long, _ 'ByVal lpOperation As String, _ 'ByVal lpFile As String, _ 'ByVal lpParameters As String, _ 'ByVal lpDirectory As String, _ 'ByVal nShowCmd As Long) As Long 'lRet = ShellExecute(0, "open", sPASS, vbNull, vbNull, SW_NORMAL) 'With CreateObject("Wscript.Shell") ' .Run "***********************", 5 'End With 'MsgBox "vbCrLf & CurDir & vbCrLf" 'Shell "**********************", 1 'With CreateObject("Wscript.Shell") ' .Run "..************", 5 'End With 'Dim ret As Long 'With CreateObject("Wscript.Shell") ' ret = .Run("*************", 7, True) 'End With 'If ret <> 0 Then MsgBox "失敗しました": Exit Sub 'Shell "*****************************" 'Dim WSH 'Set WSH = CreateObject("Wscript.Shell") 'WSH.Run "*************************", 3 'Set WSH = Nothing 'Dim file As Variant 'file = Application.GetOpenFilename 'file = "****************** " + file 'Shell (file) 'On Error GoTo errline 'ret = ShellExecute(0, "open", "***************", "", Path, 1) 'errline: 'Err = 0 'Dim ファイルのあるフォルダ As String 'Dim ファイルの名前 As String 'Dim プログラムのパス As String 'Dim 拡張子 As String 'ファイルのあるフォルダ = Worksheets("Sheet1").Cells(1, 1) 'ファイルの名前 = Worksheets("Sheet1").Cells(2, 1) 'プログラムのパス = Worksheets("Sheet1").Cells(3, 1) '拡張子 = Worksheets("Sheet1").Cells(4, 1) 'Dim ファイルのパス As String 'ファイルのパス = ファイルのあるフォルダ & "\" & ファイルの名前 & "." & 拡張子 'Dim AppFp As String 'AppFp = プログラムのパス & " """ & ファイルのパス & """" '前の""はスペース空ける '「"」が特殊文字であるため、スキップするための文字(エスケープ文字)「"」を前につける 'Dim a As Integer 'a = Shell(AppFp, vbNormalFocus) '上記プログラム全部× Const vbHide = 0 'ウィンドウを非表示 Const vbNormalFocus = 1 '通常のウィンドウ、かつ最前面のウィンドウ Const vbMinimizedFocus = 2 '最小化、かつ最前面のウィンドウ Const vbMaximizedFocus = 3 '最大化、かつ最前面のウィンドウ Const vbNormalNoFocus = 4 '通常のウィンドウ、ただし、最前面にはならない Const vbMinimizedNoFocus = 6 '最小化、ただし、最前面にはならない 'Dim objWShell 'Set objWShell = CreateObject("WScript.Shell") 'できたが×途中で終了している模様 'フォルダ「C:\happy」を開きます 'objWShell.Run "rundll32.exe url.dll" & _ ' ",**************", vbNormalFocus, False 'WScript.Echo "**********を実行しました!" 'Set objWShell = Nothing どうにかVBAから起動したいのですが、方法は無いでしょうか??

  • VBA修正してください!

    VBA修正してください! 以下のVBAを実行すると、アクティブシートが PDFに変換され、保存ダイアログボックスが出ずに 自動的にマイドキュメントに保存されます。 修正したいのは (1)保存場所を選べるようにしたい (2)adobe pdfが入っていないPCで使用した場合 MSGボックスが表示され、マクロを中止できるようにしたい -------------------------------------------------------- Dim sActivePrinter As String With Application sActivePrinter = .ActivePrinter With CreateObject("WScript.Network") .SetDefaultPrinter "adobe pdf" End With ActiveWindow.SelectedSheets.PrintOut .ActivePrinter = sActivePrinter End With End Sub -------------------------------------------------------- 使用するのは会社のPCで、複数の人が複数のPCで使用します。 最初、PDFをActiveプリンターに設定したのですが、ネットワークプリンターの 為、プリンターが"adobe pdf on Ne ○○:" ○○の部分が使用するたびに 異なり上手くいきませんでした。 VBAが全く分からない人も利用するので、デバック画面が出ないようにしたいです。 自分の知識では限界です・・・。 VBAに詳しい回答者の方、どうぞ上記VBAに書き足してください! よろしくお願いします!

  • EXECL VBAにて自動印刷100枚でフリーズ

    フィリーズの原因 とりあえず、アクティブプリンターのみで印刷を連続すると異常なし 交互に印刷すると今度はリソース不足が出ました。 最後に、EPSON LPプリンターのみに連続印刷でやはりリソース不足が出ました。 どうもアクティブプリンターからの切替でリソースを必要としているみたいですが 対策はをご教示下さい。 ======================================== Sub チェンジプリンター() '印刷切り替え Dim myPrinter As String myPrinter = Application.ActivePrinter '現在のプリンターを記憶 If Worksheets("DeviceRead-Write").Cells(6, 13).Value = 2 Then 'I6が2ならEPSON_2プリンターに印刷する Application.ActivePrinter = "EPSON_2 on Ne00:" 'プリンターを切り替える ActiveSheet.PrintOut 'シートFormの印刷 Application.ActivePrinter = myPrinter 'プリンターを元に戻す End If If Worksheets("DeviceRead-Write").Cells(6, 13).Value = 1 Then 'I6が1ならEPSON LPプリンターに印刷する ActiveSheet.PrintOut 'シートFormの印刷 End If End Sub ==========================================

  • WSHで プリンタのスクリプト うまくいかない。

    はじめまして、のりといいます。WSH初心者です。 以下のようなログオンスクリプトを組んで、プリンタ設定をしようとしますが、エ ラーが出ます。 <スクリプト prt.vbs> ' Shell Define Dim WshShell Set WshShell = WScript.CreateObject("WScript.Shell") ' Network Define Dim WshNetwork Set WshNetwork = WScript.CreateObject("WScript.Network") ' Setup Printer ' Dim c1Prt1 Dim c1PNam1 ' Setting Printer Class-1 ' c1Prt1= "\\C1DC01\C1MPR2" c1PNam1 = "LP-7700 No.2" WshNetwork.SetDefaultPrinter c1Prt1 <エラーメッセージ> "\\C1DC01\C1MPR2"という名前のプリンタはありません。 ただし、このプリントは存在していて、例えば「ファイル名で実行」で \\C1DC01\C1MPR2をいれるとちゃんとプリンタが出てきます。 以上のことで何かお分かりの方がいましたら、もしくは、このようなプリンタの設定 に関するURLなどご存知でしたら教えてください。 よろしくお願いします。

  • (VBA) Dir 関数で取得するファイル一覧の順序

    タイトルの通り、下記のサンプルコードを実行して取得するファイル一覧の順序についての質問です。 Public Sub Test1() Dim WSH As Object Dim MyPath As String Dim MyFileName As String Set WSH = CreateObject("WScript.Shell") MyPath = WSH.SpecialFolders("MyDocuments") MyFileName = Dir(MyPath & "\" & "*.*") Do Until MyFileName = "" MsgBox MyFileName MyFileName = Dir Loop Set WSH = Nothing End Sub (質問) ファイル名の昇順では取得できないようですが、もしファイル名の昇順に並べ替えるとしたら、 どのように処理したらよいのでしょうか?

  • VBA 新規にエクセルを開き既存のファイルを開く

    VBAで新規にエクセルのアプリケーションを起動し、 その中に既存のファイルを起動する方法は有りますか? Sub Sample() Dim appExcel As Excel.Application Dim WSH As Variant Dim strPath As String Set appExcel = New Excel.Application Set WSH = CreateObject("Wscript.Shell") strPath = ActiveWorkbook.Path With appExcel .Visible = True .Workbooks.Add .ActiveWorkbook.SaveAs (strPath & "\ test.xls") End With Set WSH = Nothing End Sub このコードは、ネットから拾ったサンプルコードなのですが 新しいアプリケーションでエクセルを立ち上げることはできたのですが 新規のブックが開いてしまい、 更に、開きたいファイルに上書き保存してしまいそうです。 新規のブックが開く原因は .Workbooks.Addで、 上書き保存する原因は .ActiveWorkbook.SaveAs だとわかってるのですが、 この部分を同変更すればいいのかがわかりません。 Workbooks.Open?Filename:="C:\Users\test.xlsx" だと、現在実行しているvbaファイルを同じ枠内で 該当のファイルが開いてしまいます。

  • プリンターの追加

    プリンター:RICHO IPSio NX750 RPCS を、WSHにて追加したいのですが、 うまくいきません。 ポートは、Standard TCP/IP Portになります。 以下のWSHを実行すると、 プリンター名がありません、とのエラー がでます。 Set objNetwork = WScript.CreateObject("WScript.Network") objNetwork.AddWindowsPrinterConnection "IP_133.197.52.194" よろしくお願いします。

  • Execl VBA UserForm1の印刷先

    Execl VBA UserForm1の印刷先を変更したいのですが Execl VBAで困っています。 UserFormの印刷を条件を変えてプリンター1とプリンター2に振り分けたいのですが ネットを検索してもいい方法が見つかりません。 UserFormはOSのプリンターを参照するため思うように印刷できません。 一度下記を試しましたが、試通常使うプリンターでしか印刷出来ません UserFormのプリンター切替方法のご伝授宜しくお願い致します。 =========================================== Sub チェンジプリンター() Dim myPrinter As String myPrinter = Application.ActivePrinter '現在のプリンターを記憶 If Worksheets("DeviceRead-Write").Cells(6, 11).Value = 2 Then 'I6が2ならEPSON_2プリンターに印刷する Application.ActivePrinter = "EPSON_2 on Ne02:" 'プリンターを切り替える Range("A4").Value = Application.ActivePrinter 'プリンターの確認 UserForm1.PrintForm 'フォームの印刷 Application.ActivePrinter = myPrinter 'プリンターを元に戻す Range("A2").Value = Application.ActivePrinter 'プリンターの確認 End If If Worksheets("DeviceRead-Write").Cells(6, 11).Value = 1 Then 'I6が2ならEPSON_1プリンターに印刷する Range("D2").Value = Application.ActivePrinter 'プリンターの確認 UserForm1.PrintForm 'フォームの印刷 End If End Sub

  • EXCEL VBAでプリンタの設定方法について

    EXCEL VBAのプリンタの設定方法について質問があります。 Dim oApp As Object Dim WFM As Strin WFM = "\\Cl111\フォルダ\ファイル\" &Range("C3").Value & ".doc" Set oApp = CreateObject("Word.Application")  ’ワード起動 oApp.Visible = True oApp.Documents.Open WFM  ’文書を開く Application.ActivePrinter = "AAA on Ne00:"  ’プリンタ設定 oApp.activedocument.PrintOut Copies:=1, Background:=False  ’印刷 oApp.Quit SaveChanges:=False  ’ワード終了 Set oApp = Nothing このようなコードで、(1)ワードを開き、(2)プリンタを設定し、(3)印刷をする、という作業をしたいのですが、 Application.ActivePrinter = "AAA on Ne00:" ではプリンタの設定が変わらず、通常使うプリンターで印刷がされてしまいます。 ワードを開いて印刷することで何か特殊なコードが必要なのではないかと思うのですが、調べても該当するものが出てきませんでした。 どうぞよろしくお願いいたします。

  • マクロでプリンタの選択

    EXCEL2010で、プリンタを選択するダイアログを表示するマクロの記述についてですが、 Dim xPrt As String With Application xPrt = .ActivePrinter .Dialogs(xlDialogPrinterSetup).Show End With を実行したら、表示されたダイアログにキャンセルのボタンがあったのでクリックしたところ、OKのボタンと同じように印刷が始まってしまいました。 キャンセルしたらマクロが終了するようにしたいのですが、どのような記述が必要でしょうか? ご指導のほど、よろしくお願い致します。

このQ&Aのポイント
  • PC-LL750LS6Rを使用していますが、ネットワークとインターネット画面の左側にwifiの表示がありません。ネットワークの状態は未接続となっており、トラブルシューティングからネットワークのリセットを試みました。
  • リセットを実行すると一時的にwifiが表示され接続できるようになりますが、再起動すると元の状態に戻ります。再起動するたびにwifiを認識しない状況が続いています。
  • PC-LL750LS6Rのwifi接続について困っています。どなたか解決策を教えていただけると助かります。
回答を見る

専門家に質問してみよう