VBA编辑MS WORD表从11 cols到6 cols

时间:2012-05-27 17:44:19

标签: vba ms-word word-vba

我有许多MS Word表格,需要编辑11个cols。

每个文档将包含1个表。

我想编辑一个从11个列到6个列的表。

VBA执行以下任务:

  1. 将col 2标题从时间重命名为项目
  2. 将col 3标题从时区重命名为评论
  3. 将col 5标题从Type重命名为E或A

  4. 删除第2栏,第3栏和第5栏中的所有文字(不是重命名的标题)

  5. 删除cols 6,7,9,10,1
  6. 我已经列出了编辑表格的顺序,我相信它会发挥最佳作用,但这并不重要。

    我不知道是否可以删除第2,3,5栏中的文本而不删除标题。

    最后,我猜我可以在cols 2,3,5中输入我想要的新标题,如果删除那些cols中的文本时删除了那些标题。

    感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

希望这有帮助,

Option Explicit

Private Sub myTableMacro()
    Dim tmpTable As Word.Table, tmpRange As Word.Range
    With ActiveDocument
        If .Tables.Count > 0 Then
            For Each tmpTable In .Tables
                    'Rename col 2 heading from Time to Item
                tmpTable.Cell(1, 2).Range.Text = "Item"
                    'Rename col 3 heading from Time Zone to Comment
                tmpTable.Cell(1, 3).Range.Text = "Comment"
                    'Rename col 5 heading from Type to E or A
                tmpTable.Cell(1, 5).Range.Text = "E or A"
                    'Delete all text in cols 2, 3 (but not the headers)
                Set tmpRange = .Range(tmpTable.Cell(2, 2).Range.Start, tmpTable.Cell(tmpTable.Rows.Count, 3).Range.End)
                tmpRange.Select
                Selection.Delete Unit:=wdCharacter, Count:=1
                    'Delete all text in cols 5 (but not the headers)
                Set tmpRange = .Range(tmpTable.Cell(2, 5).Range.Start, tmpTable.Cell(tmpTable.Rows.Count, 5).Range.End)
                tmpRange.Select
                Selection.Delete Unit:=wdCharacter, Count:=1
                    'Delete cols 10, 11
                Set tmpRange = .Range(tmpTable.Cell(1, 9).Range.Start, tmpTable.Cell(1, 11).Range.End)
                tmpRange.Select
                Selection.Cells.Delete wdDeleteCellsEntireColumn
                    'Delete cols 6, 7, 9
                Set tmpRange = .Range(tmpTable.Cell(1, 6).Range.Start, tmpTable.Cell(1, 7).Range.End)
                tmpRange.Select
                Selection.Cells.Delete wdDeleteCellsEntireColumn
            Next 'tmpTable
        End If
    End With
    Set tmpRange = Nothing
    Set tmpTable = Nothing
End Sub

我已经测试过,发现确定。