我正在编写我的第一个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
答案 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