VBA, Word 2007, Fout 13 (Typen komen niet met elkaar overeen)

Status
Niet open voor verdere reacties.

jackfish

Gebruiker
Lid geworden
10 sep 2010
Berichten
297
Ik probeer een userform op te bouwen die bij het openen gegevens uit documentvariabelen inleest. Tot drie variabelen gaat het goed. Als ik er een vierde aan toevoeg krijg ik foutmelding 13.

Het lukt niet om boven tafel te krijgen hoe ik het userform kan uitbouwen zonder de foutmelding te verkrijgen. Waar moet ik naar kijken?

Bekijk bijlage Test2.zip
 
Die vierde toevoegen is niet het probleem. Je probeert ze echter te schrijven naar ActiveDocument.Variables en daar heb je er nog steeds maar 3 van. Die moet je dus ook uitbreiden met een extra variabele. De 3 die je hebt zijn: Achternaam, Tussenvoegsel en Voorletters.

VBA weet nu dus niet wat er moet gebeuren met die extra variabele en geeft daar dan fout 13 op.
 
De niet bestaande variabele 'extra' kan niet worden gelezen.

Code:
Private Sub Userform_Initialize()
     On Error Resume Next
     sn = Split("Voorletters|Tussenvoegsel|Achternaam|Extra", "|")
     
     For j = 0 To UBound(sn)
       Me("titel" & j + 1) = sn(j)
     Next
     
     For j = 0 To UBound(sn)
       Me("tekst" & j + 1).Text = ActiveDocument.Variables(sn(j))
     Next
End Sub

Pas nadat die variabele in het document is gemaakt, bijv. met

Code:
Activedocument.variables("extra")=" "

wordt 'on error resume next' in de initialize gebeurtenis overbodig.

Terzijde: wanneer je je controls de namen titel0 t/m titel3 ; tekst0 t/m tekst3 geeft breng je ze in overeenstemming met het decimale stelsel zoals dat voor de array wordt gebruikt.

Code:
Private Sub Userform_Initialize()
     On Error Resume Next
     sn = Split("Voorletters|Tussenvoegsel|Achternaam|Extra", "|")
     
     For j = 0 To UBound(sn)
       Me("titel" & j) = sn(j)
     Next
     
     For j = 0 To UBound(sn)
       Me("tekst" & j).Text = ActiveDocument.Variables(sn(j))
     Next
End Sub
 
Laatst bewerkt:
"Gelezen". Je hebt helemaal gelijk :)
 
Ik kijk ernaar maar zie het niet edmoor en snb. :cool: De foutmelding blijft verschijnen ondanks dat ik de documentvariabelen aanmaak. Ik doe toch iets niet goed denk ik ...

Code:
Sub Toevoegen_Variables()
    With ActiveDocument
        .Variables("Voorletters") = " "
        .Variables("Tussenvoegsel") = " "
        .Variables("Achternaam") = " "
        .Variables("Jackfish") = " "
        .Fields.Update
    End With
End Sub

Bekijk bijlage Test2-v2.zip
 
@ meneer ichthus

Het valt niet mee tot 10 te tellen. ;) :d
Ik kom dan ook niet verder dan 4 als ik het aantal documentvariabelen tel, het aantal tekstvakken turf en het aantal 'labels' inventariseer.

Code:
Private Sub Userform_Initialize()
     sn = Split("Voorletters|Tussenvoegsel|Achternaam|Jackfish", "|")
     
     For j = 0 To UBound(sn)
       Me("titel" & j + 1) = sn(j)
       ActiveDocument.Variables(sn(j)) = "variabele " & j
       Me("tekst" & j + 1).Text = ActiveDocument.Variables(sn(j))
     Next
     ActiveDocument.Fields.Update
End Sub

Private Sub CommandButton1_Click()
    For j = 1 To activedocument.variables.count
        If Me("titel" & j) <> "" Then ActiveDocument.Variables(Me("titel" & j)) = IIf(Me("tekst" & j) = "", " ", Me("tekst" & j))
    Next
    ActiveDocument.Fields.Update
End Sub


PS. Extra huiswerkopdracht:

http://www.snb-vba.eu/VBA_Userform_invoercontrole.html
 
Laatst bewerkt:
Vrede zij met u snb... en dank voor de vingerwijzing. Het gevoel dringt zich aan mij op dat ik iets heel groots niet zie. :(

Wanneer is de SO van het huiswerk?
 
Private Sub CommandButton1_Click()
For j = 1 To 5

Leidt natuurlijk tot een foutmelding als er maar 4 labels (Me("titel" & j) en 4 tekstvakken (Me("tekst" & j)) en 4 documentvariabelen (ActiveDocument.Variables(Me("titel" & j))) zijn.

PS. dat tijdstip wordt: 'onverwachts'.
 
SO = Stiekum Onverwacht :p
 
hahaha, mooi :D. Alleen maakt het geen verschil als ik dat doe ...
 
Code:
Private Sub CommandButton1_Click()
    For j = 1 To 4
        If Me("titel" & j) <> "" Then ActiveDocument.Variables(Me("titel" & j)) = IIf(Me("tekst" & j) = "", " ", Me("tekst" & j))
    Next
    ActiveDocument.Fields.Update
End Sub
of
Code:
Private Sub CommandButton1_Click()
    For j = 1 To activedocument.fields.count
        If Me("titel" & j) <> "" Then ActiveDocument.Variables(Me("titel" & j)) = IIf(Me("tekst" & j) = "", " ", Me("tekst" & j))
    Next
    ActiveDocument.Fields.Update
End Sub
Er zit blijkbaar een gigantisch aantal documentvariabelen in dit document.
 
Laatst bewerkt:
Verwijder die + 1 in beide regels waar dit staat:
Me("titel" & j + 1)

Het moet dus dit worden:
Me("titel" & j)
 
Laatst bewerkt:
Dan doe je het niet goed want hier werkt het in je eigen document prima. Zo moet dus zijn:
Code:
Private Sub Userform_Initialize()
     sn = Split("Voorletters|Tussenvoegsel|Achternaam|Jackfish|Extra", "|")
     
     For j = 0 To UBound(sn)
       Me("titel" & j) = sn(j)
     Next
     
     If ActiveDocument.Variables.Count > 0 Then
       For j = 0 To UBound(sn)
        Me("tekst" & j).Text = ActiveDocument.Variables(sn(j))
       Next
    End If
End Sub
 
Laatst bewerkt:
.... Je hebt gelijk. Geen idee wat ik anders heb gedaan. Dank voor het geduld!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan