【问题标题】:VBA to edit MS WORD table from 11 cols to 6 colsVBA 将 MS WORD 表从 11 列编辑到 6 列
【发布时间】:2014-08-25 01:42:08
【问题描述】:

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

每个文档将包含 1 个表格。

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

VBA 执行以下任务:

  1. 将第 2 列标题从 Time 重命名为 Item
  2. 将 col 3 标题从 Time Zone 重命名为 Comment
  3. 将第 5 列标题从 Type 重命名为 E 或 A

  4. 删除第 2、3 和 5 列中的所有文本(不是重命名的标题)

  5. 删除第 6、7、9、10、11 列

我已经按照我认为最有效的方式列出了编辑表格的顺序,但这并不重要。

我不知道是否可以在不删除标题的情况下删除第 2、3、5 列中的文本。

最后,我想我可以在第 2、3、5 列中输入我想要的新标题,如果这些标题在这些列中的文本被删除时被删除。

感谢您的帮助。

【问题讨论】:

  • 你有没有尝试过?

标签: vba ms-word


【解决方案1】:

希望这会有所帮助,

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

我已经测试过,发现OK。

【讨论】:

  • @user1420354 勾选并标记为完整答案
猜你喜欢
  • 2014-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-21
  • 2020-06-16
  • 2021-12-17
  • 1970-01-01
  • 2022-08-19
相关资源
最近更新 更多