Ansprechen einer Tabellenzeile mit verbundenen Zellen mittels VBA

12/12/2007 - 13:21 von malyschok | Report spam
Hallo,

ich habe folgendes Problem:

Mittels VBA-Makro will ich in Word verschiedene Tabellen in einem Dokument
formatieren. Die Tabellen haben unterschiedliche Aufbaumuster (Anzahl der
Spalten und Zeilen, ...). Gemeinsame bei allen Tabellen ist, dass die ersten
zwei Tabellenzeilen müssen immer als "Tabellenkopf" formatiert werden
(Option: gleiche Kopfzeile auf jeder Seite wiederholen,
tbl.Rows.HeadingFormat = True).

Im Makro habe ich folgende Logik eingebaut:
1. Erste Zeile "markieren"
2. Zellen verbinden
3. "Markierung" um zweite Zeile erweitern
4. "Markierung" als Kopfzeile definieren

...
Dim rng As Range
Dim tbl As Table
...
If rng.Information(wdWithInTable) Then
Set tbl = rng.Tables(1)
tbl.Rows(1).Select
Selection.Cells.Merge
Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend
tbl.Rows.HeadingFormat = True
End If
...

Bei symmetrischen Tabellen (tbl.uniform = true) funktioniert alles
problemlos. Sobald aber eine Tabelle mit den vertikal verbundenen Zellen
vorkommt, bricht das makro mit der Fehlermeldung "Run-time error '5991':
Cannot access individual rows in this collection because the table has
vertically merged cells".

Um es noch ein Bisschen kompizierter zu machen :-) :
die vertikal verbundene Zellen sind in der zweiten Zeile vorhanden. d.h. der
Kopf der Tabelle kann folgendermassen ausehen:

II
I I
II
I I I I
I II
I I I I I I
II
<< ich hoffe, dass die Tabelle "erkennbar" ist :) >>

Im Einsatz: Word 2003 SP2

Hat jemand Idee, wie ich diese Aufgabe lösen kann?

Danke
 

Lesen sie die antworten

#1 Helmut Weber
12/12/2007 - 17:52 | Warnen spam
Hallo,

mit Ranges in Tabellen zu arbeiten bringt sowie nichts,
zumindest sehr selten. Arbeiten mit verbundenen Zellen ist elend
kompliziert. Vielleicht hilft Dir das:

Sub Test45()
With Selection
If .Information(wdWithInTable) Then
.Tables(1).Range.Cells(1).Select
' .Collapse Direction:=wdCollapseStart
.MoveEnd Unit:=wdRow
.MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend
.Rows.HeadingFormat = True
End If
End With
End Sub

Man kann auch programmatisch feststellen,
ob eine Zelle vertikal verbunden ist
und über wie viele Rows, denn ausgehend von der ersten
Zelle der Tabelle mit
Selection.MoveRight unit:=wdCell
über die ganze Tabelle kommt man mehrmals
in der gleichen Zelle an.
Dafür braucht man aber vorher ein Array
von Zellen und einen Zàhler, der festhàlt,
wie oft man in der Zelle war.

Ich möchte mir das nicht antun.

Vielleicht besser zunàchst alles formatieren,
und erst am Schluss etwaige Zellen verbinden.


Gruß

Helmut Weber, MVP WordVBA

Vista Small Business, Office XP

Ähnliche fragen