web-dev-qa-db-ja.com

Word / Excelがプリンターに到達しようとするのを防ぐにはどうすればよいですか?

WordまたはExcel(2007)で特定の操作を実行すると、これらのアプリケーションはプリンターに到達しようとします。私は職場と自宅でラップトップを使用しています。家にいるとき(仕事用のプリンターに接続していないとき)、Excelでセルを太字にする、WebページからWordに段落を貼り付けるなどの操作を実行した後、Word/Excelが応答するまで何秒も待たなければならないことがあります。 。

Wordでは、下部に「プリンタに接続しようとしています。Escキーを押して中止してください」などの小さなメッセージが表示される場合があります。

しかしながら

  1. そのオプションはExcelには存在しません

  2. escキーを押すと、Wordがクラッシュすることがあります。

回避策はありますか?

6
Roee Adler

私のデフォルトのプリンターはPDFプリンターは CutePDF 経由でインストールされます。これは無料です:)

ローカルプリンターが定義されていて、それがデフォルトである限り、すべて問題ありません。

フォントを切り替えるときにあなたが説明する正確な動作を見てきましたが、私はthink一部のプリンターが原因です許容されるフォントがあり、Wordはそれらが実際にプリンタでレンダリングされるかどうかを確認しています(ただし、なぜこれは実際に印刷は私を超えています)。

8
warren

これを回避する唯一の方法は、リモートではないデフォルトのプリンタを使用することだと思います。これは、デフォルトのプリンターを常にローカルの非ハードウェアプリンターである「MicrosoftXPS DocumentWriter」(インストールされていることを前提としています)に設定する単純なJScriptです。

var network = new ActiveXObject("WScript.Network");
network.SetDefaultPrinter("Microsoft XPS Document Writer");

これをSetDefaultPrinter.jsとして保存すると、コマンドラインを使用して実行できます。

cscript //nologo SetDefaultPrinter.js

...または、デスクトップに保存してダブルクリックして実行することもできます。

3
bobbymcr

1つのオプションは、IPアドレスに基づいてプリンターを自動的に切り替える this のようなものです。おそらく、家にいるときはなしに切り替わる可能性があります。

2
Brett B

Excel 2007でActivePrinterプロパティを確認することはできますが、何らかの理由で設定することはできません(Word VBAスクリプトでは設定できますが)。 ExcelVBAでの回避策は次のとおりです。

Set oWord = CreateObject(Class:="Word.Application")

oWord.ActivePrinter = NewDefaultPrinter$

oWord.Quit False

Set oWord = Nothing

VBAマクロがブックを変更すると(列の削除など)遅延が発生するため、現在ネットワークプリンターに設定されている場合は、デフォルトのプリンターを変更すると特に便利です。変更を加えるたびにプリンターをチェックするようです。これを防ぐには、ワークブックの変更プロセス中にデフォルトのプリンターをローカルプリンターに設定し、その後再び元に戻す必要があります。

1
smileclick

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)。

1
Lunatik

デフォルトのプリンタをローカルで定義されているプリンタに変更すると役立つ場合があります。

フォントスタイルを変更するときにアプリケーションがプリンターと対話する明確な(少なくとも私には)合理的な理由はありませんが、それが起こっている場合、少なくともローカルプリンターは接続されていないネットワークを経由しません。

1
RBerteig

別の解決策は、遅いタブでの改ページの表示を単に無効にすることです。ここでこの例を見ることができます: http://blogs.mccombs.utexas.edu/the-most/2010/02/17/hidepagebreaks/

印刷通信は、Excelが常にシートを再ページングしようとしているために発生することがよくありますが、これは高価であり、通常は不要です。そのオプションを無効にするだけで、パフォーマンスが向上することがわかりました。

0
aaronsteers