word, waarde uit cell in variabel plaatsen

Status
Niet open voor verdere reacties.

henkhoogerbrug

Gebruiker
Lid geworden
25 sep 2008
Berichten
107
Tijdens mijn zoektocht ben ik op dit forum terechtgekomen. Ik heb nog niet zo heel veel ervaring met Macro's, maar heb me wel laten overhalen om een macro te maken die gegevens uit een Word tabel in een Excel-formulier moet plaatsen.

Het lukt me wel om die gegevens in Excel te krijgen, maar ik zit nu met het probleem dat alle verborgen tekens (omgedraaide P voor enter en soor vierkantje aan het einde van een cel) ook worden meegenomen. Ik wil echter alleen de tekst in excel krijgen.

Wat ik wil is het volgende:
  1. Tekst uit een cel (tabel staat in Word) in een variabele plaatsen
  2. De verborgen tekens uit Word mogen niet in die variabele komen (omgedraaide P voor enter en soor vierkantje aan het einde van een cel)
  3. Waarden moeten in een variabele komen, omdat ik op een later tijdstip nog controles wil inbouwen, of de teksten in de cellen wil splitsen

De code die ik gebruik om de variabelen te vullen is (misschien maak ik nummer 14 in de declaratie ook nog variabel, dit is namelijk het aantal kolommen in de tabel (vandaar ook LBound en UBound)):
Code:
Dim Cell(1 To 14) As Variant

For i = LBound(Cell) To UBound(Cell)
    Cell(i) = ActiveDocument.Tables(1).Cell(1, i).Range.Text
Next

Sommige cellen bevatten tekst (cijfers en tekst) en andere alleen een datum of niets, vandaar mijn keuze voor Variant (is er misschien nog een betere optie, met het oog op de controles die ik later wil inbouwen)

Is er iemand die weet hoe ik dit op kan lossen?

ps. het word-bestand bestaat uit allemaal tabellen van 1 rij en 14 kolommen, dit is iets waar ik zelf geen invloed op uit kan oefenen (ik krijg deze via mail).
 
maak de volgende macro in Excel

Code:
Sub import()
  with getobject("[COLOR="Teal"]C:\wordbestand.doc[/COLOR]")
    for j=1 to .tables.count
       .tables(1).range.copy activesheet.cells(.rows.count,1).end(xlup).offset(1)
    next
   .close 0
 End with
End Sub
Vervang de groene tekst door de bestandsnaam van het bestand met de tabellen.
 
snb bedankt voor je reactie.

Eerste overweging is eigenlijk of ik de macro vanuit Word, of vanuit Excel moet uitvoeren.
Situatie is als volgt:
  1. Word bestand komt binnen via mail. Dit bestand bevat projectgegevens. Ieder project heeft een eigen tabel van 1 rij en 14 kolommen.
  2. De 4e kolom bevat meerdere regels tekst en daar moet ik ook nog wat mee gaan doen (vb. als er "OVL" in de tekst voorkomt is het een groot OVL project en als er "ovl" in de tekst voorkomt dan is het een klein ovl project)
  3. Per project moet er een excelformulier worden ingevuld (ik heb hier een sjabloon van gemaakt *.xlt en heb de cellen die gevuld moeten worden een naam gegeven)
  4. 10 projecten (tabellen in Word) is 10 excel formulieren (per project een bestand)
  5. Gebruiker MOET de formulieren met 1 druk op de knop kunnen genereren (en eventueel nog mailen, maar dat is nu niet aan de orde)

Omdat Word het uitgangspunt is, en er iedere maand een nieuw Word-bestand in de mailbox staat (wat word geopend) dacht ik dat het logisch zou zijn om direct vanuit dat geopende bestand de macro te draaien.



Als dit echt niet mogelijk is dan moet ik inderdaad toch maar vanuit Excel gaan werken.


Alle suggesties en oplossingen zijn welkom!
 
Dan draaien we het om:
Zet deze macro in Word

Code:
Sub export()
  with getobject("[COLOR="Teal"]C:\Excelbestand.xls[/COLOR]")
    for j=1 to activedocument.tables.count
       activedocument.tables(j).range.copy .sheets(j).cells(1,1)
    next
   .close 0
 End with
End Sub
 
het heeft erg lang geduurd, maar ben nu weer aan de slag gegaan met de macro.

Ik heb besloten om gebruik te maken van Len(), Right(), Left() en Mid() daarmee kom ik ook al een heel eind.

Omdat iedere tabel één regel heeft en ik maar één tabel tegelijk behandel heb ik de verwijzing naar de tabel aan het begin van de code staan. Onderstaande regel haalt de tekst op uit cel 14, met de correctie lengte min 1 (om het laatste 'verborgen' karakterteken niet op te nemen in de variabele).

Code:
TekstCel_14 = Left(Cell(14), Len(Cell(14)) - 1)

Wat mij betreft is dit probleem dus opgelost
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan