Sooo,我有一个很好的小子程序,可以删除表中的所有行。
Sub ClearFormTableRows(sourceRange, countRange)
Dim rowsCount As Integer, rowRangeName As Object
rowsCount = Application.WorksheetFunction.CountA(countRange)
With sourceRange
Do Until rowsCount = 1
.ListObject.ListRows(2).Delete
rowsCount = rowsCount - 1
If rowsCount = 1 Then Exit Do
Loop
End With
End Sub
直到今天它才有效。但是在调用它的主例程中,我添加了另一个调用,相同的语法只针对不同的表,现在它不会做任何事情,抛出错误9子例程超出范围。
它突出显示的是这一行:.ListObject.ListRows(2).Delete
但是,如果我注释掉其中一个调用,那么它将在该表上正确执行并不重要。但要求它做两件事,它也不会做。
我做错了什么?
答案 0 :(得分:1)
尝试以这种方式:我删除了rowRangeName object
因为您的问题中没有使用给定的代码段。
Sub ClearFormTableRows(ByRef sourceRange as Range, ByRef countRange As Range)
Dim rowsCount As Integer
Dim objListObj As ListObject
Dim objListRows As ListRows
Set objListObj = sourceRange.ListObjects(1)
Set objListRows = objListObj.ListRows
rowsCount = Application.WorksheetFunction.CountA(countRange)
While rowsCount > 1
'-- just a re-confirmation, you can remove first if condition if you want.
If (rowsCount > 1) And (rowsCount < objListRows.Count - 1) Then
objListRows(rowsCount).Delete
rowsCount = rowsCount - 1
End If
Wend
End Sub
参考:
PS:可能不相关,但请使用ByRef
或ByVal
明确声明参数:
Sub ClearFormTableRows(ByRef sourceRange As Range, ByRef countRange As Range)
:)