Wordtabellen doorzoeken en inhoud cel aanpassen met VBA

Status
Niet open voor verdere reacties.

XtraRap

Gebruiker
Lid geworden
26 jul 2010
Berichten
70
Goede middag,

Kan iemand mij helpen! Ik ben op zoek naar een macro die het volgende moet doen.

1. In een Worddocument staan ongeveer 200 tabellen. Het aantal kolommen is niet voor elke tabel hetzelfde.
2. De macro moet het document doorlopen en elke tabel steeds selecteren. (For Each Table in ActiveDocument).
3. Het zou mooi zijn als dan alle kolommen per tabel worden geselecteerd met uitzondering van kolom 1.
4. In kolommen 2 t/m x staan getallen, en soms eindigen die met een haakje.
5. Als het laatste karakter van de inhoud van de cel GEEN SLUITEND HAAKJE is, maar een gewoon getal moeten er twee VASTE spaties aan het eind van het getal worden toegevoegd (Chr (160)).
6. Next tabel
7. als er geen tabel meer gevonden is, macro stoppen.

Ik weet niet of het mogelijk is.

Een alternatief is het volgende:
Voor elke cel in elke tabel (dus ook kolom 1, en geen voorwaarde dat het laatste karakter een haakje is) aan het eind van de tekst in elke cel twee vaste spaties toevoegen (Chr (160) & (Chr (160)). En dan ingebouwd de zoekfunctie binnen die tabel (zoek sluitend haakje incl. Chr (160) & Chr (160) en vervang door sluitend haakje.

Ik hoop dat ik een beetje duidelijk ben.
Bij voorbaat dank voor jullie meedenken en expertise.
 
Je bent vergeten het document met de beschreven inhoud bij te voegen.
 
Helaas kan ik het bestand niet bijvoegen omdat dit vertrouwelijke informatie bevat. Op zich is het document niet uitzonderlijk, het is gewoon een normaal Worddocument met tekst waar tabellen instaan.
 
Een voorbeeld zonder vertrouwelijke informatie is altijd te maken.
 
Daar heb je gelijk in. Dit geeft hopelijk een juist beeld.
 

Bijlagen

  • doc ter illustratie.docm
    84,2 KB · Weergaven: 31
Wat gaat er mis zonder die twee vaste spateis ?
 
Die spaties heb ik nodig om de getallen goed uit te lijnen onder getallen met haakjes. De tabellen worden vanuit een programma geladen en dus is de optie of oplossing decimale tabs geen oplossing.
 
Dit is voldoende:

Code:
Sub M_snb()
   ActiveDocument.Content.Find.Execute " )", , , , , , , , , "", 2
   ActiveDocument.Content.Find.Execute ")", , , , , , , , , "", 2
   ActiveDocument.Content.Find.Execute "(", , , , , , , , , "-", 2
End Sub
 
Laatst bewerkt:
Helaas, deze macro zet de negatieve getallen om naar mintekens. Die haakjes zijn essentieel voor het document. Het moet op die manier worden weergegeven. Daarbij bevat het document ook heel veel teksten en dient de macro alleen over de tabellen te lopen.
 
Daarbij komt er in jouw macro achter elk NEGATIEF getal, dus waar nu eigenlijk al haakjes staan die spatie(s) juist in die cellen heb ik die niet nodig, maar in de cellen die positief zijn (dus de cellen waar geen haakjes staan). Maar.... kun je de code misschien iets ombouwen. Dat achter elk getal twee spaties komen te staan. Dan kan ik kijken of ik daar mee verder kan.
 
Dit werkt goed, maar alleen als ik met de cursor in een cel sta. 200 tabellen per cel de macro uitvoeren... dat is natuurlijk niet de bedoeling.

Code:
Dim n As Range
Set n = Selection.Cells(1).Range
    n.Start = n.End - 2
    n.Text = Replace(n.Text, vbCr, Chr(160) & Chr(160))

Deze macro werkt ook goed:

Code:
Sub SelectTables()

   Dim t As Table
   
   ' Loop door de collectie van tabellen van het huidige document.
   For Each t In ActiveDocument.Tables
   
      ' Selecteer de tabel.
      t.Select
      
      ' Vervang de spaties door harde spaties.
      With Selection.Find
      
         .Text = " "
         .Replacement.Text = Chr(160)
         .Forward = True
         .Wrap = wdFindStop
         .Format = False
         .MatchCase = False
         .MatchWholeWord = False
         .MatchWildcards = False
         .MatchSoundsLike = False
         .MatchAllWordForms = False
      End With
      Selection.Find.Execute Replace:=wdReplaceAll
      
   Next t

End Sub

als die twee samengevoegd zouden kunnen worden. Dus dat de macro het document doorloopt steeds de volgende tabel geselecteerd en dat binnen de tabel aan het eind van elke cel (ook de 1e kolom) er twee vaste spaties worden geplaatst, dan is het niet ideaal maar kan ik wel verder.
 
Als je nou eens zou vertellen wat het vervolg is.
Waarom heb je haakjes nodig in plaats van een minteken ?
Worden de gegevens daarna weer in een ander porogramma ingelezen ?
Komen de gegevens uit Excel of uit een CSV-bestand ?
 
Die haakjes zijn het beleid van de klant. Zo moet het in het document worden weergegeven. Daar kan ik niets aan veranderen. Die haakjes staan dus al in de Wordtabellen als ze vanuit een CDM systeem worden ingeladen.

Ik heb eerder (hierboven) een voorbeeld document geupload, daar heb ik het een beetje omschreven. Alles gaat omdat ik een uitlijning van getallen nodig heb.

De tabellen komen dus vanuit een CDM systeem. En na plaatsen van de tabellen zijn alle getallen netjes rechts uitgelijnd.

Zoals je in het worddocument kunt zien worden negatieve getallen als volgt weergegeven ( 1.233,99 ) - dus haakje open, spatie, getal, spatie, haakje sluiten. Die getallen, daar hoef ik niets aan te doen, die staan goed. De positieve getallen, dus zonder haakjes, staan ook rechts uitgelijnd, achter dat getal heb ik dus twee vaste spaties nodig, zodat positieve getallen netjes onder negatieve getallen komen te staan.

Eerder werkte dat perfect omdat toen vanuit Excel tabellen werden geplakt. In Excel kun je in de celeigenschappen meegeven dat als een getal positief is dat er twee spaties aan het eind van het getal worden gezet. Die spaties kwamen mee naar Word en dan liet ik alleen de macro draaien dat normale spaties werden vervangen door 'vaste spaties' zoals in de code hierboven is weergegeven. Helaas komen de celeigenschappen van de tabellen (dus die extra spaties) niet meer mee... oeps snap je het nog ;)
 
Het probleem is misschien niet opgelost, we hebben een andere route gekozen waardoor deze vraag niet meer beantwoord hoeft te worden. Dank voor het meedenken.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan