Legen alle Docvariabelen

Status
Niet open voor verdere reacties.

Plotinus

Gebruiker
Lid geworden
25 mrt 2007
Berichten
649
Ik heb een Word-sjabloon met heel veel Doc-Variabelen. Veiligheidshalve leeg ik deze iedere keer vooraf als ik een nieuwe brief maak op basis van het sjabloon. Dit doe ik als volgt:

Code:
Sub Schoonvegen()
    With ActiveDocument
        .Variables("varNaam").Value = "***"
        .Variables("varMail").Value = "***"
        .Variables("varTelefoon").Value = "***"
        .Variables("varTelGem").Value = "***"
      .
etc

    Call Velden_updaten
    End With

Ik heb zo het gevoel dat dit veel gemakkelijker moet kunnen, te meer alle Doc Vaiabelen beginnen met 'var' en alle variabelen "***" krijgen toebedeeld.

Iemand een idee hoe dit slimmer gedaan kan worden?
 
Waarom zou je dat doen als je iedere keer alle variabelen opnieuw toewijst ?

Code:
Sub M_snb()
    sn = Split("snb_1 snb_2 snb_3 snb_4 snb_5 snb_6 snb_7 snb_8 snb_9 snb_10")
    With ActiveDocument
       For j = 0 To UBound(sn)
          .Variables(sn(j)) = sn(j)
      Next
    End With
End Sub

Code:
Sub M_snb_001()
  For Each it In ActiveDocument.Variables
     MsgBox it
  Next
End Sub
 
Laatst bewerkt:
Dank je snb. Zoals ik al zei, doe ik de actie veiligheidshalve. Er zitten meer mensen soms onbedoeld aan te prutsen end at wil ik goed monitoren: er moet gewoon op veel plaatsen "***" staan

Ik heb jouw code iets aangepast:
Code:
For Each it In ActiveDocument.Variables
        ActiveDocument.Variables(it.Name).Value = "***"
    Next

Dat levert twee problemen op:
- het werkt helaas niet, zonder dat het een foutmelding geeft.
- je hebt me ooit uitstekend geholpen met het plaatsen van lijsten in DocVaiabelen (zie 9 juni 10.37 uur). Met bovenstaande actie sluit ik deze niet uit; deze worden ook op "***"gezet, als de code zou werken.

Wat jouw eerste code doet, daar kan ik helaas niets van maken.
 
Verdiep je eerst eens in wat For Each is en doet.
 
Het volgende werkt perfect:
Code:
Sub Schoonvegen()
    With ActiveDocument
        For Each it In .Variables
            If Left(it.Name, 3) = "var" Then .Variables(it.Name).Value = "***"
        Next
    End With
    Call Velden_updaten
End Sub

De DocVariabelen die lijsten bevatten blijven hiermee in takt, omdat deze niet met 'var' beginnen.

Bedankt!
 
Excuses, het had inderdaad duidelijker geformuleerd moeten worden. Maar met jouw hulp ben ik er toch geraakt!

Nogmaals dank!
 
Maar dit is beter:

Code:
Sub M_snb()
  For Each it In activedocument.Variables
     If Left(it.Name, 3) = "var" Then it = "***"
  Next
End Sub

'Call' is al 30 jaar overbodig in VBA
 
Dank voor je nog kortere en krachtigere code.

Ik heb het even nagelezen van Call en inderdaad overbodig, al houden sommigen daar toch nog wel om diverse redenen aan vast. Bij mij is het erin geslopen op basis van een boek uit 2000 VBA voor Excel.
 
De enige redenen om het te gebruiken zijn emotioneel: nostalgie, gewoonte of gebrek aan kennis van VBA.
In mijn basisboek uit 1998 wordt het al niet meer gebruikt.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan