2017-05-25 5 views
0

基本的には、vbaを使用してmsアクセステーブルからワードドキュメントを生成してから印刷します。
コードは以下の通りです:VBA - 即時印刷の代わりに標準を使用して、printを使ってword docを印刷する

With rs 
    'ensure the recordset is populated 
    If Not .BOF And Not .EOF Then 

     Set objWord = CreateObject("Word.Application") 
     'objWord.Visible = True 
     Set doc = objWord.Documents.Add 
     doc.SaveAs CurrentProject.Path & "\report.doc" 

     'not necessary but good abtitude 
     .MoveLast 
     .MoveFirst 

     While (Not .EOF) 
      If Not IsNull(.Fields("REGIONE SOCIALE")) Then 
       regioneSociale = .Fields("REGIONE SOCIALE").Value 
       regioneSociale = UCase(regioneSociale) 
      End If 
      If Not IsNull(.Fields("INDIRIZZO")) Then 
       INDIRIZZO = .Fields("INDIRIZZO").Value 
      End If 
      If Not IsNull(.Fields("CAP")) Then 
       CAP = .Fields("CAP").Value 
      End If 
      If Not IsNull(.Fields("LOCALITÀ")) Then 
       LOCALITA = .Fields("LOCALITÀ").Value 
      End If 
      If Not IsNull(.Fields("CODICE FISCALE")) Then 
       codFiscale = .Fields("CODICE FISCALE").Value 
      End If 
      If Not IsNull(.Fields("CODICE STALLA")) Then 
       codStalla = .Fields("CODICE STALLA").Value 
      End If 
      If Not IsNull(.Fields("NOTE")) Then 
       NOTE = .Fields("NOTE").Value 
      End If 
      'Debug.Print regioneSociale & CAP & LOCALITA & codFiscale & codStalla & NOTE 
      objWord.Selection.Font.Bold = True 
      objWord.Selection.Font.Underline = True 
      objWord.Selection.TypeText regioneSociale 
      objWord.Selection.Font.Bold = False 
      objWord.Selection.TypeParagraph 

      objWord.Selection.Font.Italic = True 
      objWord.Selection.TypeText "INDIRIZZO:" 
      objWord.Selection.Font.Underline = False 
      objWord.Selection.Font.Italic = False 
      objWord.Selection.TypeText " " & INDIRIZZO 
      objWord.Selection.TypeParagraph 

      objWord.Selection.Font.Underline = True 
      objWord.Selection.Font.Italic = True 
      objWord.Selection.TypeText "LOCALITÀ:" 
      objWord.Selection.Font.Underline = False 
      objWord.Selection.Font.Italic = False 
      objWord.Selection.TypeText " " & CAP & " " & LOCALITA 
      objWord.Selection.TypeParagraph 

      objWord.Selection.Font.Underline = True 
      objWord.Selection.Font.Italic = True 
      objWord.Selection.TypeText "CODICE FISCALE:" 
      objWord.Selection.Font.Underline = False 
      objWord.Selection.Font.Italic = False 
      objWord.Selection.TypeText " " & codFiscale 
      objWord.Selection.TypeParagraph 

      objWord.Selection.Font.Underline = True 
      objWord.Selection.Font.Italic = True 
      objWord.Selection.TypeText "CODICE STALLA:" 
      objWord.Selection.Font.Underline = False 
      objWord.Selection.Font.Italic = False 
      objWord.Selection.TypeText " " & codStalla 
      objWord.Selection.TypeParagraph 

      objWord.Selection.Font.Underline = True 
      objWord.Selection.Font.Italic = True 
      objWord.Selection.TypeText "NOTE:" 
      objWord.Selection.Font.Underline = False 
      objWord.Selection.Font.Italic = False 
      objWord.Selection.TypeText " " & NOTE 
      objWord.Selection.TypeParagraph 

      objWord.Selection.TypeParagraph 
      .MoveNext 
     Wend 
    Else 
     MsgBox "No record selected/empty table" 
     Exit Sub 
    End If 
    .Close 
End With 

doc.Save 
'this instruction gives immediate printing instead of the standard one... 
doc.PrintOut , , , CurrentProject.Path & "\report.doc", , , , , , , True 
doc.Close 

事実は、実際に私は、ユーザーに印刷する前に、プリンタまたは任意の他のオプションを変更する可能性を与えるしたいということです。

私が代わりにすぐに文書を印刷すると、印刷する前にenter image description here

彼にを与えることについて、このビューを話しています。

vbaで可能ですか?

私は@Sergeyのアドバイス使うコードの断片:あなたが、私は希望の小さなコードの最適化としても

doc.Activate 'just to make sure that user didn't select other document while generating 
objWord.Dialogs(wdDialogFilePrint).Show 

代わりのdoc.PrintOut

を使用することができます

End With 
objWord.Dialogs(wdDialogFilePrint).Show 
doc.Save 
doc.Close 

答えて

1

をフィールドデータのIf-sをすべて削除し、次のように単語関連セクションを変更することをお勧めします。

提案のおかげで
+0

しかし、 'objWord.Dialogs(wdDialogFilePrint).Show'はAccessをフリーズさせ(コードは実行中に保持されます)、プロセスマネージャによって終了した後で、印刷ダイアログウィンドウが表示されます。 – UrbiJr

+0

それは私のために働く。実行前にすべてのWordプロセスが強制終了されていることを確認してください。デバッグのための単語ウィンドウを表示することもできます: 'objWord.Visible = True' –

+0

ああ、今はエラーがあります。実際には、印刷ダイアログウィンドウはWordアプリケーションに関連しています。だから私が以前にそれを開くのでなければ、それは基本的にそれが開かれるのを待つ。実際には '.Visible = True'を使うと動作しますが、Wordのウィンドウが開きます.Windowsウィンドウは開きません。 – UrbiJr

関連する問題