WordまたはExcel(2007)で特定の操作を実行すると、これらのアプリケーションはプリンターに到達しようとします。私は職場と自宅でラップトップを使用しています。家にいるとき(仕事用のプリンターに接続していないとき)、Excelでセルを太字にする、WebページからWordに段落を貼り付けるなどの操作を実行した後、Word/Excelが応答するまで何秒も待たなければならないことがあります。 。
Wordでは、下部に「プリンタに接続しようとしています。Escキーを押して中止してください」などの小さなメッセージが表示される場合があります。
しかしながら
そのオプションはExcelには存在しません
escキーを押すと、Wordがクラッシュすることがあります。
回避策はありますか?
私のデフォルトのプリンターはPDFプリンターは CutePDF 経由でインストールされます。これは無料です:)
ローカルプリンターが定義されていて、それがデフォルトである限り、すべて問題ありません。
フォントを切り替えるときにあなたが説明する正確な動作を見てきましたが、私はthink一部のプリンターが原因です許容されるフォントがあり、Wordはそれらが実際にプリンタでレンダリングされるかどうかを確認しています(ただし、なぜこれは実際に印刷は私を超えています)。
これを回避する唯一の方法は、リモートではないデフォルトのプリンタを使用することだと思います。これは、デフォルトのプリンターを常にローカルの非ハードウェアプリンターである「MicrosoftXPS DocumentWriter」(インストールされていることを前提としています)に設定する単純なJScriptです。
var network = new ActiveXObject("WScript.Network");
network.SetDefaultPrinter("Microsoft XPS Document Writer");
これをSetDefaultPrinter.js
として保存すると、コマンドラインを使用して実行できます。
cscript //nologo SetDefaultPrinter.js
...または、デスクトップに保存してダブルクリックして実行することもできます。
1つのオプションは、IPアドレスに基づいてプリンターを自動的に切り替える this のようなものです。おそらく、家にいるときはなしに切り替わる可能性があります。
Excel 2007でActivePrinterプロパティを確認することはできますが、何らかの理由で設定することはできません(Word VBAスクリプトでは設定できますが)。 ExcelVBAでの回避策は次のとおりです。
Set oWord = CreateObject(Class:="Word.Application")
oWord.ActivePrinter = NewDefaultPrinter$
oWord.Quit False
Set oWord = Nothing
VBAマクロがブックを変更すると(列の削除など)遅延が発生するため、現在ネットワークプリンターに設定されている場合は、デフォルトのプリンターを変更すると特に便利です。変更を加えるたびにプリンターをチェックするようです。これを防ぐには、ワークブックの変更プロセス中にデフォルトのプリンターをローカルプリンターに設定し、その後再び元に戻す必要があります。
Personal.xls /normal.dotのThisWorkbook/ThisDocument
モジュールにプロシージャを追加して、自宅にいるかどうかを検出し、プリンタのデフォルトを適切に設定することができます。
私はこれをテストしていませんが、USERDOMAIN
(インデックス30)はこの目的に適しているはずです。次のコードは、これを行うために何が必要かについての大まかなアイデアを提供するはずです。
Sub checkDomain()
Dim desiredPrinter As String
If Environ(30) = "USERDOMAIN=YOURWORKDOMAIN" Then
'Set work default printer
desiredPrinter = "\\NetworkAddress\Work Printer on Ne04:"
Else
'Set home default printer
desiredPrinter = "Microsoft XPS Document Writer on Ne01:"
End If
If Not Application.ActivePrinter = desiredPrinter Then
Application.ActivePrinter = desiredPrinter
End If
End Sub
PCではポートが異なる可能性があることに注意してください。次のコードを実行して、VBAがプリンターの呼び出し先を確認することができます。
Sub PrinterList()
Dim objWMIService
Dim colInstalledPrinters
Dim objPrinter
Dim strPrinterName As String
Dim strComputer As String
strPrinterName = Application.ActivePrinter
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery("Select * from Win32_Printer ")
For Each objPrinter In colInstalledPrinters
If objPrinter.PrinterStatus = 1 Or objPrinter.PrinterStatus = 2 Or objPrinter.PrinterStatus = 7 Then
Debug.Print "offline:" & objPrinter.Name
Else
If InStr(strPrinterName, objPrinter.Name) Then
Debug.Print objPrinter.Name & "*"
Else
Debug.Print objPrinter.Name
End If
End If
Next
End Sub
これにより、インストールされているすべてのプリンター名がVisual Basic Editorの[イミディエイト]ウィンドウに一覧表示されます(VBAにあまり詳しくない場合は、[イミディエイト]ウィンドウの場合はCTRL + G)。
デフォルトのプリンタをローカルで定義されているプリンタに変更すると役立つ場合があります。
フォントスタイルを変更するときにアプリケーションがプリンターと対話する明確な(少なくとも私には)合理的な理由はありませんが、それが起こっている場合、少なくともローカルプリンターは接続されていないネットワークを経由しません。
別の解決策は、遅いタブでの改ページの表示を単に無効にすることです。ここでこの例を見ることができます: http://blogs.mccombs.utexas.edu/the-most/2010/02/17/hidepagebreaks/
印刷通信は、Excelが常にシートを再ページングしようとしているために発生することがよくありますが、これは高価であり、通常は不要です。そのオプションを無効にするだけで、パフォーマンスが向上することがわかりました。