| 
    
     |  | ふきゅ さん、こんばんわ。 
 >このやり方で試してみたら、ほぼやりたい事が出来ていました。
 >しかし、コントロールパネル内の通常使うプリンタが
 >
 >Left(objItem.Name, 4) <> "プリンタ"
 >
 >で最後に取り出してきたプリンタになってしまうのですが
 >元に戻す事はできないでしょうか?
 Sub tempo()
 Dim win As Object, Acp As String, objItem As Object, rr As Long, Idx As Integer
 Set win = CreateObject("Shell.Application")
 '
 Acp = Application.ActivePrinter
 '
 Workbooks.Add
 '
 For Each objItem In win.namespace(4).items
 If Left(objItem.Name, 4) <> "プリンタ" Then
 rr = rr + 1
 objItem.InvokeVerb "通常使うプリンタに設定(&F)"
 ActiveSheet.Cells(rr, 1).Value = objItem.Name
 DoEvents 'これを入れないと反映されないみたいでした
 ActiveSheet.Cells(rr, 2).Value = Application.ActivePrinter
 If Acp = Application.ActivePrinter Then
 Idx = rr '行番号取得
 ActiveSheet.Cells(rr, 3).Value = "←"
 End If
 End If
 Next
 '戻す
 Set objItem = win.namespace(4).items.Item(ActiveSheet.Cells(Idx, 1).Value)
 objItem.InvokeVerb "通常使うプリンタに設定(&F)"
 DoEvents 'これを入れないと反映されないみたいでした
 '開放
 Set objItem = Nothing
 End Sub
 
 >上記の設定でエクセル自体のプリンタは元のプリンタに
 >なっていました。ありがとうございます。
 指定の方法がそもそも間違えてましたすみません。コンパネを変更してるのにエクセルだけ戻してました。
 
 このマクロだと、コンパネでの「通常使うプリンタ」と、エクセルで一時的に変更されたアクティブなプリンタが一致しないとき(手動で変更ずみとか)にはうまく動作しないようなのでコンパネでの「通常使うプリンタ」かどうかを判定するフラグが必要なようですが、今の私にはわかりません。ごめんね。
 
 |  |