Seite 2 von 2

Re: Positionierung von Text in Tabelle mit VBA

BeitragVerfasst: 14. Apr 2021, 15:59
von theoS
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

BeitragVerfasst: 14. Apr 2021, 18:34
von DerHoepp
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

BeitragVerfasst: 14. Apr 2021, 20:39
von MarkMH_K
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

BeitragVerfasst: 14. Apr 2021, 20:58
von theoS
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

BeitragVerfasst: 15. Apr 2021, 14:58
von Gastheute
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

BeitragVerfasst: 15. Apr 2021, 15:48
von theoS
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

BeitragVerfasst: 16. Apr 2021, 15:18
von Gastheute
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

BeitragVerfasst: 16. Apr 2021, 21:23
von theoS
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