宏编译失败,因为属性使用无效

时间:2018-03-23 17:57:40

标签: vba word-vba

我正在编写我的第一个ms word宏,它迭代表中的所有行并删除所选的一行。这是代码

Sub TableCleaner()
'
' TableCleaner Macro
'
'
    Dim objTable As Table
    Dim sourceDocument As Document
    Set sourceDocument = ActiveDocument
    Dim UserChoice As String
    Dim QuestionToMessageBox As String
    QuestionToMessageBox = "Delete row with Text?"

    Dim targetRows() As Row
    ReDim targetRows(1 To 1) As Row
    For Each oRow In sourceDocument.Tables(1).Rows
        UserChoice = MsgBox(oRow.Cells(1).Range.Text, vbYesNo, "Delete Row?")
        If UserChoice = vbYes Then
            targetRows(UBound(targetRows)) = oRow
            ReDim Preserve targetRows(1 To UBound(targetRows) + 1) As Row
            oRow.Shading.BackgroundPatternColor = Word.WdColor.wdColorLightGreen
        End If
    Next oRow

    Confirmation = MsgBox("Are you sure?", vbYesNo, "Confirm?")
    If Confirmation = vbYes Then
        For Each targetRow In targetRows
            targetRow.Delete
        Next targetRow
    End If

End Sub

我在第targetRows(UBound(targetRows)) = oRow

后收到错误
Compile error:
Invalid use of property

3 个答案:

答案 0 :(得分:1)

这是因为Row是一个对象,而不是字符串,数字或其他东西"简单"。

分配对象时,您需要使用关键字Set。 (在类似的情况下一直发生在我身上!)所以:

Set targetRows(UBound(targetRows)) = oRow

注意:您应该在代码模块的顶部使用Option Explicit。这迫使你声明(使用Dim)你使用的每个变量,并有助于避免使用变量名称等拼写错误。

答案 1 :(得分:0)

您需要Set目标行:

Set targetRows(UBound(targetRows)) = oRow

答案 2 :(得分:-1)

在你的代码中,在下面一行,它期望一个索引值,如1,2,3为targetRows

targetRows( UBound(targetRows))= oRow