locked
Zeile anfügen in Wordtabelle RRS feed

  • Frage

  • Hallo NG

    Ich habe in der Wordvorlage ein Tabelle erstellt mit 5 Zeilen (reicht in den meisten Fällen). Wie kann ich nachträglich weitere Zeilen anfügen (oder einfügen)?
    VFP 9 / ab Word 2003

    Besten Dank für jeden Tipp!

    Gruss Adi

    Dienstag, 22. August 2017 06:50

Alle Antworten

  • Ich habe die Lösung nach langem suchen gefunden. Für die die es interessiert:
    oDoc.Tables[2].Rows.Add()

    Besten Dank trotzdem fürs Lesen.

    Gruss Adi

    Dienstag, 22. August 2017 15:02
  • 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


    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
  • Nicht anders zu erwarten, wenn Du eine Table.Range benutzt und nicht eine Table.Row.Range (d.h.) oDoc.Tables[lnTab].Rows[lnRow].Range.InsertBreak(7)

    Ich sagte das doch schon.

    Tschüß, Olaf.



    Olaf Doschke - http://www.doschke.name

    Sonntag, 3. September 2017 06:40
  • 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