0
因此,基本上我使用vba从ms访问表生成一个word文档,然后打印它。
代码如下:VBA - 使用标准而不是即时打印来打印word文档与打印输出
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
事实是,其实我想给用户在打印前更改打印机或任何其他选项的可能性。
打印之前,而不是立即打印文档。
vba有可能吗?代码
片段,我用的@Sergey建议:
End With
objWord.Dialogs(wdDialogFilePrint).Show
doc.Save
doc.Close
感谢您的建议。然而,'objWord.Dialogs(wdDialogFilePrint).Show'会使Access冻结(代码保持执行状态),并且只有在流程管理器终止它之后,它才会显示打印对话窗口......有些东西不能按预期工作 – UrbiJr
它适合我。确保所有Word进程在执行前都被终止。你也可以显示word窗口进行调试:'objWord.Visible = True' –
哦,现在我得到了什么错误。事实是,打印对话窗口与Word应用程序有关。所以如果我以前没有打开它,它基本上等待它被打开。实际上,使用'.Visible = True'可以工作,但是它会打开一个Word窗口,我不想... – UrbiJr