Arbeiten mit Tabellen

Dieses Thema enthält Visual Basic-Beispiele, die sich auf die folgenden Aufgaben beziehen:

Erstellen einer Tabelle, Einfügen von Text und Zuweisen einer Formatierung

Im folgenden Beispiel wird am Anfang des aktiven Dokuments eine Tabelle mit 4 Spalten und 3 Zeilen eingefügt. Die Struktur For Each...Next wird dazu verwendet, jede Zelle in der Tabelle durchzugehen. Innerhalb der Struktur For Each...Next wird die InsertAfter -Methode des Range -Objekts zum Hinzufügen von Text zu den Tabellenzellen (Zelle 1, Zelle 2 usw.) verwendet.

Sub CreateNewTable()
 Dim docActive As Document
 Dim tblNew As Table
 Dim celTable As Cell
 Dim intCount As Integer

 Set docActive = ActiveDocument
 Set tblNew = docActive.Tables.Add( _
 Range:=docActive.Range(Start:=0, End:=0), NumRows:=3, _
 NumColumns:=4)
 intCount = 1

 For Each celTable In tblNew.Range.Cells
 celTable.Range.InsertAfter "Cell " & intCount
 intCount = intCount + 1
 Next celTable

 tblNew.AutoFormat Format:=wdTableFormatColorful2, _
 ApplyBorders:=True, ApplyFont:=True, ApplyColor:=True
End Sub

Einfügen von Text in eine Tabellenzelle

Im folgenden Beispiel wird Text in die erste Zelle der ersten Tabelle im aktiven Dokument eingefügt. Die Cell -Methode gibt ein einzelnes Cell -Objekt zurück. Die ** Range** -Eigenschaft gibt ein Range-Objekt zurück. Die Delete -Methode wird zum Löschen des vorhandenen Texts verwendet, und die InsertAfter -Methode fügt den Text „Cell 1,1" ein.

Sub InsertTextInCell()
 If ActiveDocument.Tables.Count >= 1 Then
 With ActiveDocument.Tables(1).Cell(Row:=1, Column:=1).Range
 .Delete
 .InsertAfter Text:="Cell 1,1"
 End With
 End If
End Sub

Zurückgeben von Text aus einer Tabellenzelle ohne Zurückgeben der Markierung für Zellenende

Im folgenden Beispiel wird der Inhalt jeder Zelle in der ersten Zeile der ersten Dokumenttabelle zurückgegeben und angezeigt.

Sub ReturnTableText()
 Dim tblOne As Table
 Dim celTable As Cell
 Dim rngTable As Range

 Set tblOne = ActiveDocument.Tables(1)
 For Each celTable In tblOne.Rows(1).Cells
 Set rngTable = ActiveDocument.Range(Start:=celTable.Range.Start, _
 End:=celTable.Range.End - 1)
 MsgBox rngTable.Text
 Next celTable
End Sub
Sub ReturnCellText()
 Dim tblOne As Table
 Dim celTable As Cell
 Dim rngTable As Range

 Set tblOne = ActiveDocument.Tables(1)
 For Each celTable In tblOne.Rows(1).Cells
 Set rngTable = celTable.Range
 rngTable.MoveEnd Unit:=wdCharacter, Count:=-1
 MsgBox rngTable.Text
 Next celTable
End Sub

Umwandeln von vorhandenem Text in eine Tabelle

Im folgenden Beispiel wird am Anfang des aktiven Dokuments von Tabstopps begrenzter Text eingefügt, und anschließend wird der Text in eine Tabelle umgewandelt.

Sub ConvertExistingText()
 With Documents.Add.Content
 .InsertBefore "one" & vbTab & "two" & vbTab & "three" & vbCr
 .ConvertToTable Separator:=Chr(9), NumRows:=1, NumColumns:=3
 End With
End Sub

Zurückgeben des Inhalts jeder Tabellenzelle

Im folgenden Beispiel wird ein der Anzahl der Zellen in der ersten Dokumenttabelle entsprechendes Datenfeld definiert (es wird Option Base 1 vorausgesetzt). Die Struktur For Each...Next wird zur Rückgabe des Inhalts jeder Tabellenzelle und zum Zuweisen des Texts zum entsprechenden Datenfeldelement verwendet.

Sub ReturnCellContentsToArray()
 Dim intCells As Integer
 Dim celTable As Cell
 Dim strCells() As String
 Dim intCount As Integer
 Dim rngText As Range

 If ActiveDocument.Tables.Count >= 1 Then
 With ActiveDocument.Tables(1).Range
 intCells = .Cells.Count
 ReDim strCells(intCells)
 intCount = 1
 For Each celTable In .Cells
 Set rngText = celTable.Range
 rngText.MoveEnd Unit:=wdCharacter, Count:=-1
 strCells(intCount) = rngText
 intCount = intCount + 1
 Next celTable
 End With
 End If
End Sub

Kopieren aller Tabellen im aktiven Dokument in ein neues Dokument

In diesem Beispiel werden die Tabellen des aktuellen Dokuments in ein neues Dokument kopiert.

Sub CopyTablesToNewDoc()
 Dim docOld As Document
 Dim rngDoc As Range
 Dim tblDoc As Table

 If ActiveDocument.Tables.Count >= 1 Then
 Set docOld = ActiveDocument
 Set rngDoc = Documents.Add.Range(Start:=0, End:=0)
 For Each tblDoc In docOld.Tables
 tblDoc.Range.Copy
 With rngDoc
 .Paste
 .Collapse Direction:=wdCollapseEnd
 .InsertParagraphAfter
 .Collapse Direction:=wdCollapseEnd
 End With
 Next
 End If
End Sub