現在オフラインです。再接続するためにインターネットの接続を待っています

[Howto]: Word のオートメーションでの印刷の両面印刷を設定します。

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:230743
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
概要
メソッドは、印刷ジョブを開始する前に、両面印刷フラグを設定するのには、オートメーション クライアントは Word for Windows を提供しません。パラメーターがありますが、 プリント アウト 両面印刷のサポートを示すメソッド、パラメーターは真の両面印刷を提供しないし、オペレーティング システムやインストールされている言語によっては利用できません。ただし、開発者の Windows システムでこの制限を回避できます。Word を呼び出す前に、両面印刷フラグを使用しているプリンター ドライバーを変更します。 プリント アウト 関数です。

この資料は、Windows API を使用して、アクティブなプリンターの両面印刷設定を変更し、両面に印刷する Word 文書を許可する方法を示します。
詳細
このコードは両面印刷を有効にするのに、プリンター ドライバーの印刷設定を変更するのには、オートメーションで文書プロパティの API を使用します。このコードを正常に機能するのには、エンド ・ ユーザーがプリンターのグローバル印刷設定を変更するのには、適切なアクセス許可必要があります。ドライバーの設定を変更するのには、適切な権限を持たないユーザーの場合は、OpenPrinter API 呼び出しでアクセスが拒否されましたエラーが表示されます。

プリンター ドライバーは、ローカル コンピューターですがプリント サーバー上に存在しないためのマイクロソフト Windows NT と共有ネットワーク プリンターに印刷する必要がある Microsoft Windows 2000 ユーザーの場合は、これは問題です。エンド ・ ユーザーのグローバル設定を変更するのには、適切な権限を付与するのには、プリント サーバーを構成するのには、管理者のことですが、これではありません多くの場合これを行うにした方がよい。この問題を回避するには、ローカルのプリンター ドライバー、ネットワーク プリンターをインストールし、各ユーザーを自分のローカル システムの設定を制御することがでくことが可能です。

Windows NT および Windows 2000 でネットワーク プリンターをローカルのプリンター ドライバーを追加する手順

  1. 1 つは、 開始 メニューの選択 設定、、を選択 プリンター ダブルクリック プリンターを追加します。 プリンターの追加ウィザードが起動します。
  2. ダイアログ ボックスが表示されたら、プリンターの選択"マイ コンピューター"とは、ネットワークからではなく。マイ コンピューターで、ドライバーを使用するネットワーク プリンターに接続しますが、プレス 次へ 続行するのには。
  3. クリックして"ポートを追加します。."
  4. 選択 ローカル ポート ドロップダウン リスト ボックスおよびクリックで 新しいポート.
  5. ネットワーク上のプリンターの場所を入力します。たとえば。
        \\printserver\printername (using the exact path name to the printer)					
  6. 選択 [OK] 残りのセットアップを続行します。
アクティブなプリンターのプリンター プロパティを変更すると、プリンター、および Word だけではなくを使用するすべてのアプリケーションに影響します。特定の印刷ジョブの設定を変更するを計画している場合は、ジョブが完了すると、設定に戻すかどうかを確認します。

サンプルをビルドする手順

  1. Visual Basic を開き、新しいプロジェクトを作成します。デフォルトで Form1 が作成されます。
  2. 標準 BAS モジュールをプロジェクトに追加し、モジュールのコード ウィンドウに次のコードを追加します。
       Option Explicit   Public Type PRINTER_DEFAULTS       pDatatype As Long       pDevmode As Long       DesiredAccess As Long   End Type   Public Type PRINTER_INFO_2       pServerName As Long       pPrinterName As Long       pShareName As Long       pPortName As Long       pDriverName As Long       pComment As Long       pLocation As Long       pDevmode As Long       ' Pointer to DEVMODE       pSepFile As Long       pPrintProcessor As Long       pDatatype As Long       pParameters As Long       pSecurityDescriptor As Long  ' Pointer to SECURITY_DESCRIPTOR       Attributes As Long       Priority As Long       DefaultPriority As Long       StartTime As Long       UntilTime As Long       Status As Long       cJobs As Long       AveragePPM As Long   End Type   Public Type DEVMODE       dmDeviceName As String * 32       dmSpecVersion As Integer       dmDriverVersion As Integer       dmSize As Integer       dmDriverExtra As Integer       dmFields As Long       dmOrientation As Integer       dmPaperSize As Integer       dmPaperLength As Integer       dmPaperWidth As Integer       dmScale As Integer       dmCopies As Integer       dmDefaultSource As Integer       dmPrintQuality As Integer       dmColor As Integer       dmDuplex As Integer       dmYResolution As Integer       dmTTOption As Integer       dmCollate As Integer       dmFormName As String * 32       dmUnusedPadding As Integer       dmBitsPerPel As Integer       dmPelsWidth As Long       dmPelsHeight As Long       dmDisplayFlags As Long       dmDisplayFrequency As Long       dmICMMethod As Long       dmICMIntent As Long       dmMediaType As Long       dmDitherType As Long       dmReserved1 As Long       dmReserved2 As Long   End Type   Public Const DM_DUPLEX = &H1000&   Public Const DM_IN_BUFFER = 8   Public Const DM_OUT_BUFFER = 2   Public Const PRINTER_ACCESS_ADMINISTER = &H4   Public Const PRINTER_ACCESS_USE = &H8   Public Const STANDARD_RIGHTS_REQUIRED = &HF0000   Public Const PRINTER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or _             PRINTER_ACCESS_ADMINISTER Or PRINTER_ACCESS_USE)   Public Declare Function ClosePrinter Lib "winspool.drv" _    (ByVal hPrinter As Long) As Long   Public Declare Function DocumentProperties Lib "winspool.drv" _     Alias "DocumentPropertiesA" (ByVal hwnd As Long, _     ByVal hPrinter As Long, ByVal pDeviceName As String, _     ByVal pDevModeOutput As Long, ByVal pDevModeInput As Long, _     ByVal fMode As Long) As Long   Public Declare Function GetPrinter Lib "winspool.drv" Alias _     "GetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, _     pPrinter As Byte, ByVal cbBuf As Long, pcbNeeded As Long) As Long   Public Declare Function OpenPrinter Lib "winspool.drv" Alias _     "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, _     pDefault As PRINTER_DEFAULTS) As Long   Public Declare Function SetPrinter Lib "winspool.drv" Alias _     "SetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, _     pPrinter As Byte, ByVal Command As Long) As Long   Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _    (pDest As Any, pSource As Any, ByVal cbLength As Long)    ' ==================================================================   ' SetPrinterDuplex    '   '  Programmatically set the Duplex flag for the specified printer   '  driver's default properties.   '   '  Returns: True on success, False on error. (An error will also   '  display a message box. This is done for informational value   '  only. You should modify the code to support better error   '  handling in your production application.)   '   '  Parameters:   '    sPrinterName - The name of the printer to be used.   '   '    nDuplexSetting - One of the following standard settings:   '       1 = None   '       2 = Duplex on long edge (book)   '       3 = Duplex on short edge (legal)   '   ' ==================================================================   Public Function SetPrinterDuplex(ByVal sPrinterName As String, _       ByVal nDuplexSetting As Long) As Boolean      Dim hPrinter As Long      Dim pd As PRINTER_DEFAULTS      Dim pinfo As PRINTER_INFO_2      Dim dm As DEVMODE         Dim yDevModeData() As Byte      Dim yPInfoMemory() As Byte      Dim nBytesNeeded As Long      Dim nRet As Long, nJunk As Long         On Error GoTo cleanup         If (nDuplexSetting < 1) Or (nDuplexSetting > 3) Then         MsgBox "Error: dwDuplexSetting is incorrect."         Exit Function      End If            pd.DesiredAccess = PRINTER_ALL_ACCESS      nRet = OpenPrinter(sPrinterName, hPrinter, pd)      If (nRet = 0) Or (hPrinter = 0) Then         If Err.LastDllError = 5 Then            MsgBox "Access denied -- See the article for more info."         Else            MsgBox "Cannot open the printer specified " & _              "(make sure the printer name is correct)."         End If         Exit Function      End If         nRet = DocumentProperties(0, hPrinter, sPrinterName, 0, 0, 0)      If (nRet < 0) Then         MsgBox "Cannot get the size of the DEVMODE structure."         GoTo cleanup      End If         ReDim yDevModeData(nRet + 100) As Byte      nRet = DocumentProperties(0, hPrinter, sPrinterName, _                  VarPtr(yDevModeData(0)), 0, DM_OUT_BUFFER)      If (nRet < 0) Then         MsgBox "Cannot get the DEVMODE structure."         GoTo cleanup      End If         Call CopyMemory(dm, yDevModeData(0), Len(dm))         If Not CBool(dm.dmFields And DM_DUPLEX) Then        MsgBox "You cannot modify the duplex flag for this printer " & _               "because it does not support duplex or the driver " & _               "does not support setting it from the Windows API."         GoTo cleanup      End If         dm.dmDuplex = nDuplexSetting      Call CopyMemory(yDevModeData(0), dm, Len(dm))         nRet = DocumentProperties(0, hPrinter, sPrinterName, _        VarPtr(yDevModeData(0)), VarPtr(yDevModeData(0)), _        DM_IN_BUFFER Or DM_OUT_BUFFER)      If (nRet < 0) Then        MsgBox "Unable to set duplex setting to this printer."        GoTo cleanup      End If         Call GetPrinter(hPrinter, 2, 0, 0, nBytesNeeded)      If (nBytesNeeded = 0) Then GoTo cleanup         ReDim yPInfoMemory(nBytesNeeded + 100) As Byte      nRet = GetPrinter(hPrinter, 2, yPInfoMemory(0), nBytesNeeded, nJunk)      If (nRet = 0) Then         MsgBox "Unable to get shared printer settings."         GoTo cleanup      End If         Call CopyMemory(pinfo, yPInfoMemory(0), Len(pinfo))      pinfo.pDevmode = VarPtr(yDevModeData(0))      pinfo.pSecurityDescriptor = 0      Call CopyMemory(yPInfoMemory(0), pinfo, Len(pinfo))         nRet = SetPrinter(hPrinter, 2, yPInfoMemory(0), 0)      If (nRet = 0) Then         MsgBox "Unable to set shared printer settings."      End If         SetPrinterDuplex = CBool(nRet)   cleanup:      If (hPrinter <> 0) Then Call ClosePrinter(hPrinter)   End Function					
  3. Form1 には、標準のコマンド ボタンを追加します。
  4. 次のコード Form1 のコード ウィンドウを追加します。
       Option Explicit      Private Sub Command1_Click()      Dim oWord As Object      Dim oDoc As Object            Set oWord = CreateObject("Word.application")      oWord.Visible = True            Set oDoc = oWord.Documents.Add      oDoc.Range.Select            oWord.Selection.TypeText "This is on page 1" & vbCr      oWord.Selection.InsertBreak 1      oWord.Selection.TypeText "This is page 2"            SetPrinterDuplex Printer.DeviceName, 2            oDoc.PrintOut Background:=False            SetPrinterDuplex Printer.DeviceName, 1            MsgBox "Print Done", vbMsgBoxSetForeground            oDoc.Saved = True      oDoc.Close      Set oDoc = Nothing         oWord.Quit      Set oWord = Nothing   End Sub					
  5. このサンプルを実行します。両面印刷をサポートしているプリンターがある場合は、テスト ページの両面に印刷する必要があります。
関連情報
プリンターの両面印刷ユニットを使用して Word 文書を印刷しているときに表示可能性があります問題の詳細については、次の資料では、Microsoft Knowledge Base を参照してください。

176189 [Wd97]: 黒または灰色の網かけが二重に印刷されません。

196857 [Wd97]: 最初ページが印刷される上での最後のページの両面印刷

214683 [Wd97]: 両面印刷はいない両面印刷ページ上のオブジェクト

警告: この記事は自動翻訳されています

プロパティ

文書番号:230743 - 最終更新日: 12/05/2015 14:24:26 - リビジョン: 2.0

  • kbnosurvey kbarchive kbhowto kbprint kbapi kbautomation kbmt KB230743 KbMtja
フィードバック