VBA子例程在第二次运行时返回错误

时间:2013-02-03 02:34:01

标签: excel-vba excel-2010 vba excel

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
但是,如果我注释掉其中一个调用,那么它将在该表上正确执行并不重要。但要求它做两件事,它也不会做。

我做错了什么?

1 个答案:

答案 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:可能不相关,但请使用ByRefByVal明确声明参数:

Sub ClearFormTableRows(ByRef sourceRange As Range, ByRef countRange As Range) :)