Fragensteller
Zeile anfügen in Wordtabelle

Frage
Alle Antworten
-
Für die Zukunft, statte lange suchen einfach mal das, was Du automatisieren willst manuell tun, während Du eine Makroaufzeichnung machst. Das hat ein paar Haken, zeichnet z.B. keine Mauskommandos aus, aber Du kannst das Kontextmenütaste benutzen und dann Einfügen -> Zeilen unterhalb einfügen wählen.
Das zeihnet auf: Selection.InsertRowsBelow 1
Einziges Problem ist, dass beim manuellen Arbeiten zwar eine Selection ohne Code automatisch entsteht, nicht so bei der Automatisierung. Außerdem zeigt das nicht, dass es eine Tables-Collection gibt, aber sowas verrät die erkleckliche Objektreferenz in der Hilfe:
Oder Online: https://msdn.microsoft.com/de-de/library/ff837519.aspx
Oder man zeichnet z.B. das generieren einer Tabelle auf, das Makro beginnt mit
ActiveDocument.Tables.Add ... und voila, weiß man, dass es eine Tables Eigenschaft gibt.
Wenn man die Tables Kollektion kennt ist es auch möglich den VBA Weg über die Selection in VFP nachzuspazieren:
loWord.ActiveDocument.Tables[2].Select()
loWord.Selection.InsertRowsBelow(1)Es macht bei der Generierung auch Sinn Objektreferenzen zu Speicher, z.B. wenn Du die Tabelle generierst per
loTable = loWord.ActiveDocument.Tables.Add(...), denn das generiert nicht nur die Tabelle in Word, es gibt auch eine Objektreferenz zurück. Intellisense zeigt es an, wenn Du loWord definiert hast und im Kommandofenster tippst, ist der Intellisense Tooltip wenn Du bei "loWord.ActiveDocument.Tables.Add(" bist die Parametrisierung der Add() Methode, die in "as Table" endet, also ein Table Objekt zurückgibt.
Dann kannst Du auch diese Tabelle im Nachhinein überarbeiten mit loTable.Rows.Add()
Es macht Sinn sich in bestimmte sehr allgemein relevante Themen einzulesen, z.B. was die Selection ist und was eine Range ist. Und welche Grundobjekte es gibt.
Wenn man damit anfängt kann das viel Zeit fressen, aber ich weiß nicht, wo Du lange herumgesucht hast. Ich habe Dir gerade direkt und indirekt drei Angriffspunkte gegeben, die Wordhilfe intern/online, Intellisense in VFP und Word Makroaufzeichnung.
Tschüß, Olaf.
Olaf Doschke - http://www.doschke.name
- Bearbeitet Olaf Doschke Mittwoch, 30. August 2017 07:31
Mittwoch, 30. August 2017 07:31 -
Guten Tag Olaf
Besten Dank für die sehr guten Ausführungen. Ich arbeite sehr viel mit vfp9 kombiniert mit Excel zusammen. Word brauche ich eher selten, aber mit deinen Tipps sollte es in Zukunft auch besser klappen. Trotzdem habe ich eine kleine Anschlussfrage. Ich möchte in einer Tabelle (ich stehe zBsp. in der Tab[3] Zeile[5] Spalte[1]) und möchte nun einen Seitenumbruch. Die Makroaufzeichnung hat mir folgenden Code angezeigt:
Selection.InsertBreak Type:=wdPageBreak
Ich müsste jetzt irgendwie den Type als nummerischen Wert rausfinden (8 -> in nächste Spalte springen)
Also in der Art oDoc.Selection.InsertBreak(??)
Ich wäre dir für deine Unterstützung wirklich sehr froh. Besten Dank!
Tschüss, Adi
Samstag, 2. September 2017 08:55 -
Da hilft jetzt Grundwkssen VBA.
1. Wegen des Wertes von Konstanten hilft der Objekt Browser Dir eine Latte aller Officekonstanten #DEFINES rauszurücken. Das findest Du sicher schon irgendwo genauer beschrieben. google Suche nach #DEFINE wdPageBreak oder ähnlich hilft für einzelne Werte auch immer.
2. In VBA können Parameter auch ohne Klammerung angegeben werden und außerdem kann man sich mit Parameternamen wie laut definition das auslassen optionaler Parameter sparen. Wer das weiß, weiß, daß er nichts weiß, weil VFP das nicht so unterstützt. Du mußt wissen, an welcher Stelle der Parameter Type stehen muß, also hilft nur die Referenz der Klasse Section und ihrer Methode InsertBreak.
Schaut man nach, hat InsertBreak nur einen Parameter. Insofern ja, sowas wie Doc. Selection.InsertBreak(8)
Aber wenn Du etwas mit Code machst, selektierst Du nichts. Hier kommt einfach zum Tragen, was ich schon sagte. Gewisse Grundkenntnisse sind nötig, über mindestens mal Selection und Range, hier hast Du einen Grund dafür warum.
Du kannst mit einer Selektion arbeiten, Du mußt nur vorher auch eine generieren, mittels Select() an einer Range, z.B. Oder Du nutzt aus dass auch ein Range Objekt die Insertreak Methode kennt.
Du stehst in einer Zelle und möchtest darin ein Pagebreak, das passt wirgendwie nicht. Logischerweise sollte ein Break nach einer Tabellenzeile passieren, also wäre das oWord.ActiveDocument.Tables(X) oder alternativ irgendeine Objektreferenz auf die Tabelle und von dort weiter .Rows(X).Range.InsertBreak(8)
Tschüß, Olaf.
Olaf Doschke - http://www.doschke.name
Samstag, 2. September 2017 11:09 -
Besten Dank für deine Anregungen. Ich krieg jetzt den Seitenumbruch hin:
oDoc.Tables[lnTab].Range.InsertBreak(7)
Allerdings bin ich noch nicht ganz zufrieden. Ich stehe in einer Tabelle in der vorletzten Zeile und feuere den Befehl.
Er macht den Seitenumbruch aber am Anfang der Tabelle. Ich möchte aber, dass das in der Tabelle gemacht wird, damit auf der Folgeseite die Tabelle weiter geht. Ich bin jetzt noch am Tüfteln, ich habe noch einige Ideen.Nochmals besten Dank und Tschüss, Adi
Samstag, 2. September 2017 14:05 -
Ja, du hast recht. Aber nach langem probieren sieht man vor lauter Rows und Cells irgendwann das Wesentliche nicht mehr. Jetzt funktioniert alles so wie gewünscht. Dank deiner Hilfe und Ausführungen bin ich jetzt in der Lage auch weitere Formatierungen etc. anzubringen.
Nochmals ganz herzlichen Dank für deine Geduld.
Tschüss, Adi
Dienstag, 5. September 2017 04:19