Positionierung von Text in Tabelle mit VBA

Moderator: ModerationP

Re: Positionierung von Text in Tabelle mit VBA

Beitragvon 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
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5600
Registriert: 19. Apr 2008, 00:14

Re: Positionierung von Text in Tabelle mit VBA

Beitragvon 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
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9519
Registriert: 14. Mai 2013, 11:08

Re: Positionierung von Text in Tabelle mit VBA

Beitragvon 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
MarkMH_K
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2660
Registriert: 17. Jul 2011, 12:45
Wohnort: Köln rrh

Re: Positionierung von Text in Tabelle mit VBA

Beitragvon 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.
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5600
Registriert: 19. Apr 2008, 00:14

Re: Positionierung von Text in Tabelle mit VBA

Beitragvon 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.
Gastheute
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 95
Registriert: 09. Mär 2021, 16:07

Re: Positionierung von Text in Tabelle mit VBA

Beitragvon 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.
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5600
Registriert: 19. Apr 2008, 00:14

Re: Positionierung von Text in Tabelle mit VBA

Beitragvon 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
Gastheute
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 95
Registriert: 09. Mär 2021, 16:07

Re: Positionierung von Text in Tabelle mit VBA

Beitragvon 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
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5600
Registriert: 19. Apr 2008, 00:14

Vorherige

Zurück zu Word Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 Gäste