Ich bin ein Anfänger mit VBA und Codierung im Allgemeinen und ich bin mit einem Problem mit meinem VBA-Code fest. Hier ist, was ich tun möchte:Aktualisieren von Formularfelder vor dem Speichern eines PDF über VBA
Ich habe zwei füllbare Felder (f_autpar_nom und f_autpar_fiche) mit meiner Access-Datenbank, die auf meine Word-Datei in zwei Formfield (eleves_nom und eleves_numfiche) mit einem command_click() sein müssen. Dann öffnet sich mein Word-Dokument und fordert mich auf mit einem "Möchten Sie das speichern" und danach das Word-Dokument als PDF speichern und per Email versenden.
Alles funktioniert bis auf eine Sache: Die Formularfelder werden nicht aktualisiert, wenn ich die PDF-Datei drucke und die Standardmeldung zurückgebe, die ich eingestellt habe (was "erreur" ist).
Was ich brauche, ist eine Möglichkeit zu finden, das Formularfeld zu aktualisieren, bevor meine Nachricht mich auffordert, die E-Mail zu senden.
Hier ist der Code, den ich mit Zugang haben
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
und mit 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
Haben Sie darüber nachgedacht, beide Subroutinen zu einer zu kombinieren, die (eher) von Access ausgelöst werden sollte? Meiner Meinung nach wird es dieses Problem lösen. Also, keine 'Document_Open event'-Aktion, sondern nur ein Makro in Access –
Der' On Error Resume Next'-Befehl löscht alle vorhandenen Fehlerbedingungen. Daher muss es nicht von "Err.Clear" gefolgt (oder vorangegangen) werden. – Variatus
Ihre Access-Routine öffnet das Dokument, füllt den Inhalt der Formularfelder in 'doc' und setzt dann' Doc = Nothing'. Die gespeicherte Version von 'Doc' wird nie geändert. Wenn Sie Änderungen an dem gespeicherten Dokument vornehmen möchten, müssen Sie diese natürlich speichern. – Variatus