【发布时间】:2017-12-21 20:02:07
【问题描述】:
我是 VBA 和一般编码的初学者,但我的 VBA 代码存在问题。这就是我想做的事情:
我的 Access 数据库中有两个可填充字段(f_autpar_nom 和 f_autpar_fiche),它们需要在我的 Word 文件中的两个表单字段(eleves_nom 和 eleves_numfiche)中使用 command_click()。然后,我的 Word 文档打开并提示我“是否要保存此文件”,然后 Word 文档另存为 PDF 并通过电子邮件发送。
除了一件事之外,一切都在工作:当我打印 PDF 并返回我设置的默认消息(即“erreur”)时,表单域没有更新。
我需要在消息框提示我发送电子邮件之前找到更新表单域的方法。
这是我使用 Access 的代码
Function fillwordform()
Dim appword As Word.Application
Dim doc As Word.Document
Dim Path As String
On Error Resume Next
Error.Clear
Path = "P:\Commun\SECTEUR DU TRANSPORT SCOLAIRE\Harnais\Autorisations Parentales\Autorisation parentale vierge envoyée\Autorisation_blank.docm"
Set appword = GetObject(, "word.application")
If Err.Number <> 0 Then
Set appword = New Word.Application
appword.Visible = True
End If
Set doc = appword.Documents.Open(Path, , False)
With doc
.FormFields("eleves_nom").Result = Me.f_autpar_nom
.FormFields("eleves_numfiche").Result = Me.f_autpar_fiche
appword.Visible = True
appword.Activate
End With
Set doc = Nothing
Set appword = Nothing
End Function
Private Sub Commande47_Click()
Dim mydoc As String
mydoc = "P:\Commun\SECTEUR DU TRANSPORT SCOLAIRE\Harnais\Autorisations Parentales\Autorisation_blank.docm"
Call fillwordform
End Sub
和Word
Private Sub document_open()
Dim outl As Object
Dim Mail As Object
Dim Msg, Style, Title, Help, Ctxt, Response, MyString
Dim PDFname As String
Msg = "L'autorisation sera sauvegardée et envoyée par email. Continuer?"
Style = vbOKCancel + vbQuestion + vbDefaultButton2
Title = "Document"
Ctxt = 1000
Response = MsgBox(Msg, Style, Title, Help, Ctxt)
If Response = vbOK Then
ActiveDocument.Save
PDFname = ActiveDocument.Path & "\" & "Autorisation Parentale " & FormFields("eleves_nom").Result & ".pdf"
ActiveDocument.SaveAs2 FileName:=PDFname, FileFormat:=wdFormatPDF
Set outl = CreateObject("Outlook.Application")
Set Mail = outl.CreateItem(0)
Mail.Subject = "Autorisation parentale " & FormFields("eleves_nom").Result & " " & FormFields("eleves_numfiche")
Mail.To = ""
Mail.Attachments.Add PDFname
Mail.Display
Application.Quit SaveChanges:=wdDoNotSaveChanges
Else
MsgBox "Le fichier ne sera pas envoyé."
Cancel = True
End If
End Sub
【问题讨论】:
-
您是否考虑将两个子例程合并为一个(而)应该从 Access 触发的子例程?在我看来,它将解决这个问题。因此,没有
Document_Open event操作,而 Access 中只有一个宏 -
On Error Resume Next命令清除所有现有的错误情况。因此,Err.Clear后面不需要(或前面)。 -
您的 Access 例程打开文档,在
doc中填写表单域的内容,然后设置Doc = Nothing。Doc的保存版本永远不会改变。显然,如果您希望在保存的文档中进行更改,则必须保存它们。 -
@KazimierzJawor 我尝试合并两个宏,但无法通过具有访问权限的 vba 显示带有 word 的 msgbox。
-
@Variatus 我尝试将“doc = nothing”取出,但它仍然不起作用。