|
ふきゅ さん、こんばんわ。
>このやり方で試してみたら、ほぼやりたい事が出来ていました。
>しかし、コントロールパネル内の通常使うプリンタが
>
>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
>上記の設定でエクセル自体のプリンタは元のプリンタに
>なっていました。ありがとうございます。
指定の方法がそもそも間違えてましたすみません。コンパネを変更してるのにエクセルだけ戻してました。
このマクロだと、コンパネでの「通常使うプリンタ」と、エクセルで一時的に変更されたアクティブなプリンタが一致しないとき(手動で変更ずみとか)にはうまく動作しないようなのでコンパネでの「通常使うプリンタ」かどうかを判定するフラグが必要なようですが、今の私にはわかりません。ごめんね。
|
|