如何删除具有特定Shading.BackgroundPatternColor的所有行(从选定表中删除)

格雷格·穆索(Greg Mousseau)

我想将快捷键关联到可以在Word文档的某些表上使用的VBA宏。此宏应遍历所选表的所有行,并删除具有特定Shading.BackgroundPatternColor的行

我尝试了以下代码:

Sub DeleteRowWithShading()


Dim oRow As Word.Row

  For Each oRow In Selection.Rows
        If oRow.Shading.BackgroundPatternColor = -721354855 Then
            oRow.Delete
        End If
  Next oRow

End Sub

遍历表的所有行都是正确的,但是没有按预期删除行。

我是VBA的新手,所以对您的帮助不胜感激!

辛迪大师

在循环中删除集合的元素时,会发生问题。删除操作会从集合中删除该项目,从而使内部计数失效。

有两种基本方法可以解决此问题。

1)从后到前处理所有项目。由于从集合中删除的内容是在最后,因此不会浪费时间:

Sub DeleteRowWithShading()
    Dim oRow As Word.Row
    Dim tbl As Word.Table
    Dim nrRows As Long, rowCounter As Long
    Dim check As Long

    Set tbl = Selection.Tables(1)
    nrRows = tbl.Rows.Count

  For rowCounter = nrRows To 1 Step -1
        Set oRow = tbl.Rows(rowCounter)
        If oRow.Shading.BackgroundPatternColor = -721354855 Then
            check = check + 1
            oRow.Delete
        End If
  Next
  Debug.Print "Nr of rows deleted: " & check

End Sub

2)在第一个循环中将项目添加到数组或自定义集合中,然后循环该数组/集合以删除所有项目(行)。

Sub DeleteRowWithShadingInArray()
    Dim oRow As Word.Row
    Dim tbl As Word.Table
    Dim RowsToDelete() As Variant
    Dim check As Long, itemNr As Long

    Set tbl = Selection.Tables(1)
    itemNr = 0
    For Each oRow In tbl.Rows
        ReDim Preserve RowsToDelete(itemNr)
        If oRow.Shading.BackgroundPatternColor = -721354855 Then
            Set RowsToDelete(itemNr) = oRow
            itemNr = itemNr + 1
        End If
    Next

    itemNr = 0

    For itemNr = 0 To UBound(RowsToDelete)
            check = check + 1
            RowsToDelete(itemNr).Delete
    Next

    Debug.Print "Nr of rows deleted: " & check

End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

删除HTML表中的所有行

如何使用Eloquent删除表中的所有行?

如何删除在特定列中具有NA的DataFrame的所有行?

如何意外删除表中的所有行

如何从所有BOM表中删除特定文章?

取消选择数据表中的所有选定行

从所有表中删除行

从mysql表中删除所有行

如何(具有良好的渐近复杂性)从(很长)行中删除所有特定字符?

如何从MySQL数据库的所有表中删除特定行?

从json数据中删除特定的或选定的属性。我不想删除所有具有Category:null的键值对

如何从/删除具有特定名称的所有文件?

SQL查询删除具有特定值的所有行?

如何从所有Excel工作表中删除任何行?

关于删除所有<td>具有特定类的表行的问题

如何删除特定文件夹中具有特定扩展名的所有文件?

在MySQL中删除所有具有特定值的行

删除所有具有特定文本和范围的行

从具有选定单元格的Excel工作表中删除特定内容

如何删除所有具有特定名称的文件?

如何删除具有特定 id 的所有项目?

从 id 中具有特定子字符串的 HTML 表中删除所有行 (tr)

如何从具有许多不同关系的表中删除并删除项目和所有相关?

如何删除具有特定值的行

如何删除r中具有特定列条件的行?

如何删除表中除带有特定单词的行之外的所有数据?

删除具有特定值的所有行

如何删除另一列中具有特定值的所有 NaN 值的行?

如何删除具有特定字符的行