[VBA]Find and replace in word

Pagina: 1
Acties:

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Topicstarter
Ik moet een hele zooi documentjes gaan omzetten en dat zijn er niet een stuk of 50, maar wel 20 keer meer. Dit zijn allemaal word documentjes. Wat ik moet omzetten is allemaal text, wat dan weer door een soort van template engine word gebruikt. Maar nu moet bijv. <ng> omgezet worden naar @NGBLOKKEN:F:<NG*.rtf>@. Nu probeer ik macro's te bouwen die de boel wat versimpelen, maar nu stuit ik tegen een probleem.

Het probleem is dat ik soort van regular expression wil gebruiken binnen word, alleen word heeft maar een beperkte regular expression functie. Voor de geintresseerden zoek een in de help op: "Wildcard Characters Used in String Comparisons". Nu kan ik wel gaan zoeken op deze expressie: \<??\>, maar daarbij weet ik niet hoe ik dat de replace expressie moet indelen om die tekens ook in de replace te kunnen gebruiken.

Nu ben ik rond gaan zoeken op internet, maar daar kon ik dus helemaal niks vinden. Hier op GoT ook niet echt.

Hebben jullie dit wel eens gebruikt en weten jullie toevallig hoe ik dit moet oplossen :? Of kennen jullie een betere manier om die boel om te zetten :? Of mischien nog een handige add-in voor word om die zoekfuncties uit te bereiden :?

offtopic:
Ik wist trouwens niet zeker of het hier hoort of toch in SA, want ik zoek die oplossing om te gebruiken binnen macro's, of een andere techniek, maar het gaat wel over office, dus ik weet niet echt.

[ Voor 11% gewijzigd door eghie op 25-11-2004 11:28 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 21:24

NMe

Quia Ego Sic Dico.

ASP.NET Visual Basic:
1
2
3
4
5
6
7
8
    Dim objRegExp
    
    Set objRegExp = New RegExp
    objRegExp.Global = True
    objRegExp.IgnoreCase = True
    
    objRegExp.Pattern = "<(??)>"
    s = objRegExp.Replace(s, "blaat: \1")

Zoiets? Werkt in VBScript iig, waarschijnlijk in VBA ook wel.

[ Voor 24% gewijzigd door NMe op 25-11-2004 11:39 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Topicstarter
-NMe- schreef op donderdag 25 november 2004 @ 11:38:
ASP.NET Visual Basic:
1
2
3
4
5
6
7
8
    Dim objRegExp
    
    Set objRegExp = New RegExp
    objRegExp.Global = True
    objRegExp.IgnoreCase = True
    
    objRegExp.Pattern = "<(??)>"
    s = objRegExp.Replace(s, "blaat: \1")

Zoiets? Werkt in VBScript iig, waarschijnlijk in VBA ook wel.
Het zou fijn wezen als dit zou werken, maar VBA kent RegExp niet.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 21:24

NMe

Quia Ego Sic Dico.

Probeer dan dit.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

je bedoelt zoiets:
zoeken naar: [<](??)[>]
vervangen door: @\1BLOKKEN:F:<\1*.rtf>@

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Topicstarter
Verwijderd schreef op donderdag 25 november 2004 @ 13:06:
je bedoelt zoiets:
zoeken naar: [<](??)[>]
vervangen door: @\1BLOKKEN:F:<\1*.rtf>@
Dit werkt niet. Dan kan hij ineens niks meer matchen, maar dat ligt aan die blok haken, maar heb ook al geprobeerd met \<(??)\>, maar dat werkt ook niet.
Ik ben hier nu ff naar aan het kijken, hopen dat dit gaat werken.

Verwijderd

sorry - zoeken met jokertekens moet aan staan - bij mij werkt het iig.

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Je kunt ook in VBA het RegExp object gebruiken, maar dan moet je het alleen als een COM-object aanmaken D'r zal vast een VBA-equivalent voor de term "COM-object" zijn, maar die weet ik zo gauw niet

Dit gaat als volgt:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
'Create RegExp object
Dim re as Object
re = CreateObject("VBScript.RegExp")

'Use it
re.Global = False
re.Pattern = myPattern
matches = re.execute(myString)

For Each match In matches
  MsgBox("Match length: " & Len(match.value))
Next


Het enige probleem hierbij is dat het object nu "late-bound" is - pas als je code wordt uitgevoerd, wordt er bepaald of het RegExp-object aanwezig is en of het de gevraagde properties en methoden ondersteunt. Plus dat je IDE niet automatisch de objecten en methoden van je RegExp-object herkent. Dus hou die documentatie er bij ;)

[ Voor 92% gewijzigd door MrBucket op 25-11-2004 15:10 ]


  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Topicstarter
Verwijderd schreef op donderdag 25 november 2004 @ 14:38:
sorry - zoeken met jokertekens moet aan staan - bij mij werkt het iig.
Die stond aan, anders was het een beetje zinloos. ;)
MrBucket schreef op donderdag 25 november 2004 @ 15:05:
Je kunt ook in VBA het RegExp object gebruiken, maar dan moet je het alleen als een COM-object aanmaken D'r zal vast een VBA-equivalent voor de term "COM-object" zijn, maar die weet ik zo gauw niet

Dit gaat als volgt:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
'Create RegExp object
Dim re as Object
re = CreateObject("VBScript.RegExp")

'Use it
re.Global = False
re.Pattern = myPattern
matches = re.execute(myString)

For Each match In matches
  MsgBox("Match length: " & Len(match.value))
Next


Het enige probleem hierbij is dat het object nu "late-bound" is - pas als je code wordt uitgevoerd, wordt er bepaald of het RegExp-object aanwezig is en of het de gevraagde properties en methoden ondersteunt. Plus dat je IDE niet automatisch de objecten en methoden van je RegExp-object herkent. Dus hou die documentatie er bij ;)
Ik ken het principe van COM objecten en in VBA zal het ook vast wel COM objecten heten. Dit zou vrij vet wezen als dit werkt, ik ga er even mee testen.
Pagina: 1