Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Word VBA] Zoek en vervang (ten einde raad)

Pagina: 1
Acties:

  • DJ-Anubis
  • Registratie: Maart 2001
  • Laatst online: 10-11-2024
Ik word ben gek :)

Na eindeloos googlen, zoeken, proberen weet ik het nu echt niet meer. Aangezien een aantal VBA helden me hier al geholpen hadden met een Excel vraag, dan ook deze maar even hier.

We werken hier veelal met automatisch gegenereerde documenten, die worden in RTF formaat uitgepoept. Vaak willen we een specifiek lettertype in het document veranderen, niet iedereen vindt het leuk om scripts te schrijven, dus vandaar dat ik een userform met wat VBA heb gemaakt. Achter de knop zit de volgende code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Sub FontVerfraai()
Dim myRange As Range
Set myRange = ActiveDocument.Range
  
    With myRange.Find
        .ClearFormatting
         .Font.Name = "Courier New"
         .Font.Size = "10"
         .Replacement.ClearFormatting
         .Replacement.Font.Name = "Tahoma"
         .Replacement.Font.Bold = 1
         .Replacement.Font.Size = "9"

         .Text = ""
         .Replacement.Text = ""

         .Forward = True
         .Wrap = wdFindContinue
         .Format = True
         .MatchCase = False
         .MatchWholeWord = False
         .MatchWildcards = False
         .MatchSoundsLike = False
         .MatchAllWordForms = False
         .Execute Replace:=wdReplaceAll
          End With
  End Sub


Deze code werkt nu echter alleen voor de eerste en laatste pagina (?! inderdaad 8)7 ).

Denk dat het te maken heeft waar de tekst staat. Op de eerste en laatste pagina staat de tekst in een tabel. Deze veranderd hij wel, de rest niet.

Kan iemand hier nog iets zinnigs van maken?

"Het leven is als een neus, je moet er uit halen wat er in zit ... "


  • Room42
  • Registratie: September 2001
  • Niet online
Via [google=vba find replace word] kwam ik dit stukje code tegen:


Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
   .Text = "text-to-find"
   .Replacement.Text = "replacement-text"
   .Forward = True
   .Wrap = wdFindContinue
   .Format = False
   .MatchCase = False
   .MatchWholeWord = False
   .MatchWildcards = False
   .MatchSoundsLike = False
   .MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll


Dat doet het bij mij wel. Je moet alleen dan de formatting er nog in prutsen.

[ Voor 6% gewijzigd door Room42 op 12-08-2009 15:23 ]

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Doe eens ActiveDocument.Range.select (bijvoorbeeld in je Direct-scherm) en zie wat er wordt geselecteerd. Oftewel: kan het zijn dat niet alle tekst binnen het bereik valt?

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • DJ-Anubis
  • Registratie: Maart 2001
  • Laatst online: 10-11-2024
@sjaakduhuuhl: Had ik ook gevonden inderdaad, geef helaas exact de zelfde resultaten.

@F_J_K: Hij selecteert wel netjes het gehele document.

Misschien overbodig om getest te hebben, maar eerst opslaan naar doc ipv rtf mag ook niet baten.

[ Voor 25% gewijzigd door DJ-Anubis op 12-08-2009 13:35 ]

"Het leven is als een neus, je moet er uit halen wat er in zit ... "


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Ah, jammer :P De code zelf werkt namelijk prima zoals het hoort.
offtopic:
Op een uitlijnfoutje na dan :+


Ik moet zeggen geen idee te hebben hoe het met RTF icm tabellen zit, zou je een (geanonimiseerd) voorbeeld kunnen uploaden? :)

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • DJ-Anubis
  • Registratie: Maart 2001
  • Laatst online: 10-11-2024
F_J_K schreef op woensdag 12 augustus 2009 @ 13:38:
Ah, jammer :P De code zelf werkt namelijk prima zoals het hoort.
offtopic:
Op een uitlijnfoutje na dan :+


Ik moet zeggen geen idee te hebben hoe het met RTF icm tabellen zit, zou je een (geanonimiseerd) voorbeeld kunnen uploaden? :)
Je begrijpt dat na het eindeloos testen en prutsen aan de code m'n TAB policy wat veranderd is :)
Zal eens kijken of ik een RTF kan opbreken en uploaden (en of die de zelfde kuren vertoond).

Voobeeld bestand
Hierin veranderd hij dus wel wat er in een tabel staat, maar niet wat gewoon als courier new is geschreven.

[ Voor 13% gewijzigd door DJ-Anubis op 12-08-2009 13:57 ]

"Het leven is als een neus, je moet er uit halen wat er in zit ... "


Verwijderd

misschien kan je het zoeken op font-size achterwege laten?
er is iig iets bizars aan de hand met het voorbeelddocument. als de inhoud ervan gekopieerd wordt naar een nieuw document verandert de lettergrootte van de ten onrechte ongewijzigde paragraaf vanzelf in new courier 12 (ipv. 10).
anders kan je deze routine uitvoeren om de lettertypes aan te passen :
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub WijzigFont()
  Dim EenParagraaf  As Paragraph
  
  For Each EenParagraaf In ActiveDocument.Paragraphs
    If _
        ( _
          ("Courier New" = EenParagraaf.Range.Font.Name) And _
          (10 = EenParagraaf.Range.Font.Size) _
        ) _
    Then
      EenParagraaf.Range.Font.Name = "Tahoma"
      EenParagraaf.Range.Font.Size = 9
      EenParagraaf.Range.Font.Bold = True
    End If
  Next
End Sub

  • DJ-Anubis
  • Registratie: Maart 2001
  • Laatst online: 10-11-2024
Verwijderd schreef op woensdag 12 augustus 2009 @ 14:54:
misschien kan je het zoeken op font-size achterwege laten?
er is iig iets bizars aan de hand met het voorbeelddocument. als de inhoud ervan gekopieerd wordt naar een nieuw document verandert de lettergrootte van de ten onrechte ongewijzigde paragraaf vanzelf in new courier 12 (ipv. 10).
anders kan je deze routine uitvoeren om de lettertypes aan te passen :
--knip--
Het blijft een vreemd probleem. Zonder de font size had ik ook al geprobeerd inderdaad (maakt in ons geval niet uit), maar had de hoop dat het iets verder specificeren wat zin zou hebben (ook al werkt dat vaak juist averechts).

Helaas, ook geen succes. Code werkt wel (is wel trager), maar pakt ook alleen weer de fonts in tabellen aan.

Overigens werkt de find en replace (ctrl + h) wel naar behoren als je maar 2 x 'vervang alles' doet. (2x het scriptje uitvoeren heeft helaas niet het zelfde resultaat :) )

[ Voor 29% gewijzigd door DJ-Anubis op 12-08-2009 15:37 ]

"Het leven is als een neus, je moet er uit halen wat er in zit ... "


Verwijderd

Ik heb hier een vergelijkbaar probleem. :'(
Mijn Word is engels dus de termen zijn misschien afwijkend.
Het doorlopen in VBA met for each ... door de stijlen doorloopt wel alle paragraph stijlen, maar niet alle stijlen die in je stijloverzicht staan als Normal + Courier New etc. bij de eigenschappen hiervan zijn deze gekenmerkt als character stijl ipv Paragraph stijl.
De stijl in het scherm is dus niet de stijl die Word onderwater in VBA ziet en de acties zijn dus ook onbetrouwbaar.
Zelf zoek ik ook nog een betrouwbare manier om iets dergelijks te bereiken.
In mijn geval betreft het een wijziging van de corporate stijl van documenten.
Ik krijg hier ook wisselende resultaten afhankelijk van hoe de documenten zijn aangemaakt.
Puur met stijlen geen problemen, maar met directe formatting wel omdat ook dan de test faalt.
Het puur wissen van alle stijlen is geen optie.

Wie weet raad??
Pagina: 1