Positionierung von Text in Tabelle mit VBA

Antwort erstellen

Smilies
:D :) :( :o :shock: :? 8-) :lol: :x :P :razz: :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: :badgrin: :doubt:
BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet
Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Positionierung von Text in Tabelle mit VBA

Re: Positionierung von Text in Tabelle mit VBA

Beitrag von theoS » 16. Apr 2021, 21:23

Also, das Geheimnis liegt offenbar nicht in der Aufnahme der Tabelle in die Variable, denn der Code macht eigentlich genau das was er soll.
Wenn du die Zeilen ein wenig höher machst, siehst du, dass die Einträge die er reinschreibt auch in der Mitte angeordnet sind.
Jetzt kann ich nur rätseln, was du mit vertikaler Zentrierung sonst meinen könntest.
Wenn du die Fett eingetragenen Strings mittig haben möchtest, dann geht das mit den beiden Zeilen:
Code: Alles auswählen
        tblInhaltA.Rows(n).Cells.VerticalAlignment = 1 ' wdCellAlignVerticalCenter 'das ist Vertikal, und das geht auch!
        tblInhaltA.Rows(n).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter

Dann hab ich dir auch schon mal empfohlen, dass du nicht mit toggle arbeitest. Das macht der Makrorekorder, weil du auf die Toggle-Taste drückst.
Im Code hast du die enmalige Chance, nicht togglen zu müssen sondern kannst gezielt ein oder ausschalten.
Code: Alles auswählen
tblInhaltA.Cell(n, 1).Range.Bold = True 'schaltet Fett ein


Weiters hast du, ein wenig merkwürdig, einmal die Zeile behandelt, einmal die 1.Zelle der Zeile, was bei einer einspaltigen Tabelle ja das gleiche ist. Der besseren Lesbarkeit von Code und dass du später wenn du mal was änderst noch checkst was da passiert, nimm möglichst immer eins her.

Wiederum dokterst du immer noch mit einem Style rum, den eigentlich jedes Word an Bord hat: "Tabellenraster". Gut, kann sein, dass du englische Betriebssysteme/Versionen hast, dann geht das natürlich zwar auch, aber halt ein wenig anders.
Wenn du schon im Style was machst, dann könntest du dir ja auch gleich das graugestreifte dort drin einstellen.
Code: Alles auswählen
'    With stytblInhalt.Table
''        .Condition(wdOddRowBanding).Shading.Texture = wdTexture10Percent
''        .RowStripe = 1

Da fehlt dann noch die Behandlung der ersten Zeile, die sonst als Kopfzeile angesehen wird vom Style, das kann man machen.
Wobei ich deinen Ansatz der "Streifenbildung" einfacher, besser finde weil du ja sowieso auch die Zentrierung der Zeile verändern möchtest und die Tabelle also sowieso durchschleifst.
Spar dir also den Style.
Um deine Tabelle mit einem einfachen Strich rundum zu verzieren genügt das hier:
Code: Alles auswählen
With tblInhaltA
  .Rows.Borders.InsideLineStyle = wdLineStyleSingle
  .Rows.Borders.OutsideLineStyle = wdLineStyleSingle
End With

Re: Positionierung von Text in Tabelle mit VBA

Beitrag von Gastheute » 16. Apr 2021, 15:18

Die Deklaration lasse ich jetzt mal weg, das war schon ausführlich besprochen, mit Word. vor den Table, Row, Cell, Style, Range....

Code: Alles auswählen
'....
Set rngInhaltA = objDocument.Paragraphs(1).Range
    objDocument.Tables.Add Range:=rngInhaltA, numrows:=34, numcolumns:=1
    Set tblInhaltA = objDocument.Tables(1)
    Set stytblInhalt = objDocument.Styles.Add(Name:="StyleInhalt", Type:=wdStyleTypeTable)
    With stytblInhalt.Table
        .Borders(wdBorderTop).LineStyle = wdLineStyleSingle
        .Borders(wdBorderBottom).LineStyle = wdLineStyleSingle
        .Borders(wdBorderHorizontal).LineStyle = wdLineStyleSingle
        .Borders(wdBorderVertical).LineStyle = wdLineStyleSingle
        .Borders(wdBorderLeft).LineStyle = wdLineStyleSingle
        .Borders(wdBorderRight).LineStyle = wdLineStyleSingle
        .Alignment = wdAlignRowLeft
    End With
    tblInhaltA.Style = stytblInhalt
 n = 1
 m = 2
    For i = 1 To 17
        tblInhaltA.Cell(n, 1).Range.Text = strFelderTexteVB(n)
        tblInhaltA.Cell(n, 1).Range.Bold = wdToggle
        tblInhaltA.Cell(n, 1).Shading.Texture = wdTexture10Percent
        tblInhaltA.Rows(n).Cells.VerticalAlignment = 1 ' wdCellAlignVerticalCenter
        ' VerticalAlignment funktioniert nicht, warum?
        tblInhaltA.Cell(m, 1).Range.Text = strFelderTexteVB(m)
        tblInhaltA.Rows(m).Cells.VerticalAlignment = 1 ' wdCellAlignVerticalCenter
        n = n + 2
        m = m + 2
    Next i

Re: Positionierung von Text in Tabelle mit VBA

Beitrag von theoS » 15. Apr 2021, 15:48

Glaube ich nicht, es sei denn, du hast die Formatierung mit einer Formatvorlage gemacht, das denke ich aber nicht. Bleibt zu prüfen, ob sich das ändert, wenn du die Formatierung von vor dem Befehl auf nach den Befehl legst.
Mein Verdacht ist dann noch eher, dass du die Tabelle nicht richtig in die Variable gelegt hast.
poste mal den Code, wie du die Tabelle in die Variable legst, die du behandeln möchtest.

Re: Positionierung von Text in Tabelle mit VBA

Beitrag von Gastheute » 15. Apr 2021, 14:58

Hallo Theo,

im Direktfenster wurde für ?wdCellAlignVerticalCenter eine 1 ausgegeben.
Wenn ich im Code statt der Konstanten eine 1 schreibe, bleibt das Ergebnis wie zuvor, keine vertikale Zentrierung.

In der Tabelle im Kopfteil meines Dokuments funktioniert die vertikale Zentrierung (auch die horizontale, wie besprochen).
Nur in der Tabelle im Hauptteil des Dokumentes geht die vertikale Zentrierung nicht.

Vielleicht ist Markus der Lösung nahe?

Gruß,
T.

Re: Positionierung von Text in Tabelle mit VBA

Beitrag von theoS » 14. Apr 2021, 20:58

Wenn das von Access aus geht, dürfte das tatsächlich an den Konstanten liegen. Der defaultwert ist bei der Vertkalrichtung 0, also der Wert den die vermutlich von Access als Variable erkannte Bezeichnung annimmt.

Re: Positionierung von Text in Tabelle mit VBA

Beitrag von MarkMH_K » 14. Apr 2021, 20:39

Hi,

"…kommt der Text der Tabellenzeile vertikal dezentriert heraus." Meine 2ct dazu:
In der Zellenendemarke (dem Sputnik ¤) kann eine Absatz-Formatvorlage und eine direkte Formatierung. stecken.

Zum einen: Wenn das Absatzformat im Sputnik mehrfachen Zeilenabstand und/oder Anfangs- und/oder Endeabstand enthält, wird der Absatz in den Augen von Word vertikal zentriert, was man wegen der im Absatzformat steckenden Leerräume aber nicht so aussieht.

Zu zweiten: Word-Tabellen sind nicht so ganz trivial, es gibt noch mehr Stolpersteine. GucksDu bei Pia Bork:
http://www.borkpc.de/Word/wd_tabfv_02.html

Gruß, Markus

Re: Positionierung von Text in Tabelle mit VBA

Beitrag von DerHoepp » 14. Apr 2021, 18:34

Moinmoin,

mir ist das Gesamtprojekt noch zu undurchsichtig und weiterhin halte ich es für störrisch, nicht auf Templates zu setzen und das konkrete Problem kann ich auch nicht einfach so nachstellen, aber ich würde noch einwerfen wollen, dass TableStyles nur greifen, wenn die inkludierten Paragraphs keinen eigenen Style haben und nicht händisch formatiert sind.

Viele Grüße
derHöpp

Re: Positionierung von Text in Tabelle mit VBA

Beitrag von theoS » 14. Apr 2021, 15:59

Dann gib mal im direktbereich ?wdCellAlignVerticalCenter ein und drück Enter.
Vermute da kommt nichts dabei raus, weil Access ja die Wordkonstanten nicht kennt.
Schreib mal statt der Konstante eine 1
https://docs.microsoft.com/de-de/office ... lalignment

Re: Positionierung von Text in Tabelle mit VBA

Beitrag von Gastheute » 14. Apr 2021, 14:14

Ohje, ich hatte eben erst Hoffnung geschöpft, dass es am wdCellAlignVerticalCenter liegt, aber nein, die Zeile Text in den entsprechenden Tabellenzeilen in tabInhalt bleibt dezentriert und noch oben gerückt erscheinend. :( Auch wenn ich den entsprechenden Code etwas anders im Tabellencode positioniere, kommt der Text der Tabellenzeile vertikal dezentriert heraus. :(

Re: Positionierung von Text in Tabelle mit VBA

Beitrag von theoS » 14. Apr 2021, 13:33

Lies mal noch mal meinen Code.

Re: Positionierung von Text in Tabelle mit VBA

Beitrag von Gastheute » 14. Apr 2021, 13:28

Das ist ja gerade das, was ich schon in meinem Code verarbeitet hatte und eingefügt. Aber es funktioniert nicht: die Tabellenzeilen mit Text zeigen sich nicht vertical zentriert, wie in deinem und meinem Code angegeben. Das ist ja gerade das Problem, dass dies nicht funktioniert. Jetzt sind wir wieder am Anfang angekommen.

Code: Alles auswählen
 For i = 1 To 17
        tblInhaltA.Cell(n, 1).Range.Text = strFelderTexteVB(n)
        tblInhaltA.Cell(n, 1).Range.Bold = wdToggle
        tblInhaltA.Cell(n, 1).Shading.Texture = wdTexture10Percent
        ' VerticalAlignment funktioniert nicht, warum?
        tblInhaltA.Rows(n).Cells.VerticalAlignment = wdAlignVerticalCenter
        tblInhaltA.Cell(m, 1).Range.Text = strFelderTexteVB(m)
        tblInhaltA.Rows(m).Cells.VerticalAlignment = wdAlignVerticalCenter
n = n+2
m = m+2
next i

Ratlos.

Re: Positionierung von Text in Tabelle mit VBA

Beitrag von theoS » 14. Apr 2021, 12:33

Also, das mit dem veritkalen Zentrieren im Style ist so eine Option, die über VBA einfach nicht gesteuert werden kann.
Da haben sie so einige Sachen die in den Klickibuntibefehlen stecken, nicht implementiert, wie mir scheint, als sie die Tabellenformatvorlagen mit der 2007er Version neu aufstellten.
Zumindest ist mir davon bisher im Netz noch nichts untergekommen.

Du kannst das aber doch machen, indem du die Zellen, die so behandelt werden sollen entsprechend behandelst.
Das habe ich dir ein wenig weiter oben schon mal gezeigt:
Code: Alles auswählen
With tabKopf
.Rows(1).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter 'das stellt den Absatz in die Mitte
.Rows(1).Cells.VerticalAlignment = wdCellAlignVerticalCenter ' das zentriert die Zeile 1 wie gedacht, Vertikal.
'.Rows(2).Cells(3).VerticalAlignment = wdCellAlignVerticalCenter 'hier stellst du die 3. Zelle der zweiten Reihe auf mittig
end with

dumm ist halt hier, dass man keine Zellebereiche wie in Excel angeben kann.
Da kannst du aber auch mit Schleifen arbeiten.
Aber dazu musst du nicht im Style rumpfuschen. Würde mich schön bedanken, wenn du mir meinen Tabellenstyle zerschießt. :)
Und was den Aufwand betrifft, den hast du doppelt mit dem Style, den du ja nicht so manipulieren kannst wie du willst.
Du gehst einfach die Spalten oder die Zeilen durch die du so haben willst, das ist alles.

Re: Positionierung von Text in Tabelle mit VBA

Beitrag von Gastheute » 14. Apr 2021, 10:08

Guten Morgen Theo,

danke für den Hinweis. Ich weiß allerdings leider nicht wirklich, was ich jetzt am besten machen soll. Nach meinem Verständnis bedarf es nur einer Kleinigkeit und dann sollte das funktionieren. Dein Vorschlag läuft auf Aufwand hinaus, in meinen Ohren, den ich gerade nicht verstehe. Sorry für das Begriffsstutzen. :(

Ich habe bisher nur Tabellenstyles programmiert, da mein Ergebnisdokument nur 3 Tabelle beinhaltet (im Kopf- und Fußbereich, und im Dokumentinhalt)

Wie kann ich in dieses Tabellenstyle einen Absatzformat-VerticalAlignment einfügen? Ich ahne, du bist davon nicht begeistert. Ich komme leider aber mit deiner Erklärung nicht klar und weiß nicht, was du genau bevorzugst und wie das geht, was du meinst.

Vielen Dank und gute Grüße,
T.

Re: Positionierung von Text in Tabelle mit VBA

Beitrag von theoS » 13. Apr 2021, 16:14

Ich spreche von einem Style, der was mit der Tabelle zu tun hat, von was für einem du sprichst, weiß ich nicht. Du hast einfach Style gesagt. Das ist wie wenn du in eine Menschenmenge "Mensch komm" rufst und erwartest, dass Otto kommt der aber vorher auch nie deine Stimme gehört hat.
Word will hier schon genau wissen was du von ihm willst.
da hilft auch nichts, dass du das 100 mal sagst, davon weiß es weder ich noch Word.
Style ist einmal einer der den Absatz behandelt, der hat im Allgemeinen keine Tabelle.
Dann gibt es einen Tabellenstyle, der hat wiederum einen Absatzstyle drin. Das ist alles nicht so linear wie du dir das vorstellst. Lass die Finger vom Style und formatier den Kram einzeln durch, da hast du schon Code dafür gekriegt, das funktioniert auch.

Re: Positionierung von Text in Tabelle mit VBA

Beitrag von Gastheute » 13. Apr 2021, 14:59

.ParagraphFormat findet sich nicht in dem obigen Style, das ich gezeigt habe, die Methode steht dort nicht zur Verfügung.
Ich brauche eine VerticalAlignment keine horizontale Positionierung.

Irgendwie sprichst du von einem anderen Style als den, den ich oben gezeigt habe.

Nach oben

cron