Access VBA - output naar word (bookmark) werkt niet volledig.

Status
Niet open voor verdere reacties.

fde

Gebruiker
Lid geworden
31 aug 2017
Berichten
110
Ik heb een raar verschijnsel. Vanuit m'n frm_uitvoerder kan ik verschillende documenten (word) genereren, o.a. een werkgeversverklaring.
Het gekke is dat deze steeds perfect heeft gewerkt en nu nog maar deels.

Ik gebruik deze code hiervoor
PHP:
Private Sub btnWgvDoc_Click()
Dim objX As Word.Application
Dim wordDoc As Word.DOCUMENT
    
    
MsgBox "je gaat voor " & txtUitvoerderVoornaam & " " & txtUitvoerderNaam & " een nieuwe werkgeversverklaring aanmaken", vbOKCancel + vbInformation, "Nieuwe werkgeversverklaring"

'If IsNull(Me!UITVOERDER_BEDRIJF_NAAM) Then
'MsgBox "Opgelet! De bedrijfsnaam is niet ingevuld en daarvoor kan de werkgeversverklaring niet worden aangemaakt", vbOKCancel, _
"Bedrijfsnaam verplicht invullen"
'    Else

'If IsNull(Me!WERF_CONTACT) Then
'MsgBox "Opgelet! De contactnaam is niet ingevuld en daarvoor kan de werkgeversverklaring niet worden aangemaakt", vbOKCancel, _
"Contactnaam verplicht invullen"
    'Else
    
'If IsNull(Me!WERF_CONTACT_TELEFOON) Then
'MsgBox "Opgelet! Het contact telefoonnummer is niet ingevuld en daarvoor kan de werkgeversverklaring niet worden aangemaakt", vbOKCancel, _
"Contact telefoon verplicht invullen"
 '   Else
 
If IsNull(Me!UITVOERDER_VOORNAAM) Then
MsgBox "Opgelet! De voornaam van de uitvoerder is niet ingevuld en daarvoor kan de werkgeversverklaring niet worden aangemaakt", vbOKCancel, _
"Voornaam verplicht invullen"
    Else
    
If IsNull(Me!UITVOERDER_NAAM) Then
MsgBox "Opgelet! De naam van de uitvoerder is niet ingevuld en daarvoor kan de werkgeversverklaring niet worden aangemaakt", vbOKCancel, _
"Naam verplicht invullen"
    Else
    
'If IsNull(Me!UITVOERDER_FUNCTIE) Then
'MsgBox "Opgelet! De functie van de uitvoerder is niet ingevuld en daarvoor kan de werkgeversverklaring niet worden aangemaakt", vbOKCancel, _
"Functie verplicht invullen"
 '   Else
    
If IsNull(Me!UITVOERDER_GEBOORTEDATUM) Then
MsgBox "Opgelet! De geboortedatum van de uitvoerder is niet ingevuld en daarvoor kan de werkgeversverklaring niet worden aangemaakt", vbOKCancel, _
"Geboortedatum verplicht invullen"
     Else
     
If IsNull(Me!UITVOERDER_INSZ) Then
MsgBox "Opgelet! Het rijksregisternummer van de uitvoerder is niet ingevuld en daarvoor kan de werkgeversverklaring niet worden aangemaakt", vbOKCancel, _
"Rijksregisternummer verplicht invullen"
     Else
     
'If IsNull(Me!UITVOERDER_ID_KAART) Then
'MsgBox "Opgelet! Het ID-kaartnummer van de uitvoerder is niet ingevuld en daarvoor kan de werkgeversverklaring niet worden aangemaakt", vbOKCancel, _
"ID-kaartnummer verplicht invullen"
'     Else
     
If IsNull(Me!UITVOERDER_WERF_RSZ) Then
MsgBox "Opgelet! Het RSZ werfnummer van de uitvoerder is niet ingevuld en daarvoor kan de werkgeversverklaring niet worden aangemaakt", vbOKCancel, _
"RSZ werfnummer verplicht invullen"
     Else
     
If IsNull(Me!UITVOERDER_NATIONALITEIT) Then
MsgBox "Opgelet! De nationaliteit van de uitvoerder is niet ingevuld en daarvoor kan de werkgeversverklaring niet worden aangemaakt", vbOKCancel, _
"Nationaliteit verplicht invullen"
     Else
     
If IsNull(Me!UITVOERDER_WERF_DIMONA) Then
MsgBox "Opgelet! Het dimonanummer van de uitvoerder is niet ingevuld en daarvoor kan de werkgeversverklaring niet worden aangemaakt", vbOKCancel, _
"Dimonanummer verplicht invullen"
     Else
     
If IsNull(Me!UITVOERDER_ADRES) Then
MsgBox "Opgelet! Het adres van de uitvoerder is niet ingevuld en daarvoor kan de werkgeversverklaring niet worden aangemaakt", vbOKCancel, _
"Adres verplicht invullen"
     Else
     
'If IsNull(Me!UITVOERDER_POSTCODE) Then
'MsgBox "Opgelet! De postcode van de uitvoerder is niet ingevuld en daarvoor kan de werkgeversverklaring niet worden aangemaakt", vbOKCancel, _
"Postcode verplicht invullen"
     'Else
     
'If IsNull(Me!UITVOERDER_GEMEENTE) Then
'MsgBox "Opgelet! De woonplaats van de uitvoerder is niet ingevuld en daarvoor kan de werkgeversverklaring niet worden aangemaakt", vbOKCancel, _
"Woonplaats verplicht invullen"
     'Else
     
If IsNull(Me!UITVOERDER_START_DATUM) Then
MsgBox "Opgelet! De werf-startdatum van de uitvoerder is niet ingevuld en daarvoor kan de werkgeversverklaring niet worden aangemaakt", vbOKCancel, _
"Werf-startdatum verplicht invullen"
     Else
     
'If IsNull(Me!UITVOERDER_WERF_NAAM) Then
'MsgBox "Opgelet! De werfnaam van de uitvoerder is niet ingevuld en daarvoor kan de werkgeversverklaring niet worden aangemaakt", vbOKCancel, _
"Werfnaam verplicht invullen"
     'Else
'If IsNull(Me!UITVOERDER_WERF_POSTCODE) Then
'MsgBox "Opgelet! De werf postcode van de uitvoerder is niet ingevuld en daarvoor kan de werkgeversverklaring niet worden aangemaakt", vbOKCancel, _
"Werfpostcode verplicht invullen"
     'Else
     
'If IsNull(Me!UITVOERDER_WERF_GEMEENTE) Then
'MsgBox "Opgelet! De werf gemeente van de uitvoerder is niet ingevuld en daarvoor kan de werkgeversverklaring niet worden aangemaakt", vbOKCancel, _
"Werfgemeente verplicht invullen"
     'Else

 Set objX = GetObject("", "Word.Application")
    objX.Application.Visible = True
    Set wordDoc = objX.Documents.Open("C:\tmp\werkgeversverklaring_bpw.dotx")

 'objX.Selection.GoTo What:=wdGoToBookmark, Name:="bedrijfnaam2"
 'objX.Selection.TypeText UITVOERDER_BEDRIJF_NAAM
 
 'objX.Selection.GoTo What:=wdGoToBookmark, Name:="bedrijfwerfcontact"
 'objX.Selection.TypeText WERF_CONTACT
 
 'objX.Selection.GoTo What:=wdGoToBookmark, Name:="bedrijfwerfcontacttel"
 'objX.Selection.TypeText WERF_CONTACT_TELEFOON
 
 objX.Selection.GoTo What:=wdGoToBookmark, Name:="vnaam2"
 objX.Selection.TypeText UITVOERDER_VOORNAAM
 
 objX.Selection.GoTo What:=wdGoToBookmark, Name:="naam2"
 objX.Selection.TypeText UITVOERDER_NAAM
 
 'objX.Selection.GoTo What:=wdGoToBookmark, Name:="functie"
 'objX.Selection.TypeText UITVOERDER_FUNCTIE
 
 objX.Selection.GoTo What:=wdGoToBookmark, Name:="naam"
 objX.Selection.TypeText UITVOERDER_NAAM
 
 objX.Selection.GoTo What:=wdGoToBookmark, Name:="vnaam"
 objX.Selection.TypeText UITVOERDER_VOORNAAM
 
 objX.Selection.GoTo What:=wdGoToBookmark, Name:="geboortedatum"
 objX.Selection.TypeText UITVOERDER_GEBOORTEDATUM
 
 objX.Selection.GoTo What:=wdGoToBookmark, Name:="insz"
 objX.Selection.TypeText UITVOERDER_INSZ
 
 objX.Selection.GoTo What:=wdGoToBookmark, Name:="idkaart"
 objX.Selection.TypeText UITVOERDER_ID_KAART
 
 objX.Selection.GoTo What:=wdGoToBookmark, Name:="rsz"
 objX.Selection.TypeText UITVOERDER_WERF_RSZ
 
 objX.Selection.GoTo What:=wdGoToBookmark, Name:="nationaliteit"
 objX.Selection.TypeText UITVOERDER_NATIONALITEIT
 
 objX.Selection.GoTo What:=wdGoToBookmark, Name:="dimona"
 objX.Selection.TypeText UITVOERDER_WERF_DIMONA
 
 'objX.Selection.GoTo What:=wdGoToBookmark, Name:="adres"
 'objX.Selection.TypeText UITVOERDER_ADRES
 
 'objX.Selection.GoTo What:=wdGoToBookmark, Name:="postcode"
 'objX.Selection.TypeText UITVOERDER_POSTCODE
 
 objX.Selection.GoTo What:=wdGoToBookmark, Name:="woonplaats"
 objX.Selection.TypeText UITVOERDER_GEMEENTE
 
 objX.Selection.GoTo What:=wdGoToBookmark, Name:="datumstart"
 objX.Selection.TypeText UITVOERDER_START_DATUM
 
 'objX.Selection.GoTo What:=wdGoToBookmark, Name:="bedrijfnaam"
 'objX.Selection.TypeText UITVOERDER_BEDRIJF_NAAM
 
 'objX.Selection.GoTo What:=wdGoToBookmark, Name:="werfnaam"
 'objX.Selection.TypeText UITVOERDER_WERF_NAAM
 
 'objX.Selection.GoTo What:=wdGoToBookmark, Name:="werfpostcode"
 'objX.Selection.TypeText UITVOERDER_WERF_POSTCODE
 
 'objX.Selection.GoTo What:=wdGoToBookmark, Name:="werfgemeente"
 'objX.Selection.TypeText UITVOERDER_WERF_GEMEENTE
 
 objX.Selection.GoTo What:=wdGoToBookmark, Name:="datumdoc"
 objX.Selection.TypeText Format(Date, "Long date")
    'End If
    'End If
    'End If
    'End If
    'End If
    'End If
    'End If
    'End If
    'End If
    'End If
    End If
    End If
    End If
    End If
    End If
    End If
    End If
    End If
    End If
End Sub

Om zeker te zijn heb ik alle bookmarks in het desbetreffende worddocument gechekt bookmark.JPG.
Ook staan ze juist vermeld op het in te vullen word-document. bookmark_ingevuld.JPG
Alle velden op mijn form frm_uitvoerder zijn ingevuld. prt_personalia.JPG.

Heeft iemand enig idee waarom het ene veld wel wordt weggeschreven naar Word en het andere veld niet?
 
Laatst bewerkt door een moderator:
Op basis van je code? Nee, geen enkel idee. Ik sta ook niet te popelen om deze spaghetti te ontwarren, ik denk dat het wel wat simpeler kan. Maar ik ga er vanuit dat je dezelfde constructie consequent hebt doorgevoerd, dus dat mag het probleem niet zijn. Zeker niet omdat het in het verleden wél heeft gewerkt. Dan ligt het probleem niet in de code, maar in de aangeboden data.
Zonder voorbeeldje is er verder niet zoveel van te zeggen.
 
Wist je dit ?:

Code:
with GetObject("C:\tmp\werkgeversverklaring_bpw.dotx")
  .bookmarks("bedrijfnaam2")=UITVOERDER_BEDRIJF_NAAM
end with

en beter nog met docvariables:
Code:
with GetObject("C:\tmp\werkgeversverklaring_bpw.dotx")
  .variables("bedrijfnaam2")=UITVOERDER_BEDRIJF_NAAM
  .fields.update
end with
 
@snb: ik ondersteun zeker de laatste optie. Maar ik was eigenlijk nog niet van plan om dit soort voorstellen in de strijd te gooien; ik wilde eerst de onderbouwing van de methodiek op orde hebben “)
 
Deze oplossing heb ik eraan geboden die mijns inziens ook werkt. Althans alle testen waren ok tot hiertoe.
PHP:
objX.Selection.GoTo What:=wdGoToBookmark, Name:="naam"
'objX.Selection.TypeText UITVOERDER_NAAM
objX.Selection.Text = (CStr(Forms!frm_uitvoerder!UITVOERDER_NAAM))
Natuurlijk is alles voor verbetering vatbaar.
 
Laatst bewerkt:
Natuurlijk is alles voor verbetering vatbaar.
Dat lijkt mij ook. Je zou eens kunnen beginnen met die onwaarschijnlijke nestingen weg te gooien, die zijn nergens voor nodig. Niet doorheen te komen! Elke If die je maakt, kun je zelfstandig behandelen en afronden. Dus If... MsgBox, Exit Sub, End If. En pas op het laatst (als dus alle IF’s zijn doorlopen, en je nog steeds in de routine zit, kun je het document vullen. En ook dat kan netter.
Code:
With objX.Selection
     .GoTo What:=wdGoToBookmark, Name:="naam"
     .TypeText = Me.UITVOERDER_NAAM
End With
 
@snb: zoals ik in #4 schreef, zou ik ook voor de DocVariables gaan, en niet voor de bladwijzers. TS is echter een beetje hardnekkig in het omzeilen van de beste oplossing :).
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan