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

Excel VBA子例程在第二次运行时返回错误,excel,excel-2010,vba,Excel,Excel 2010,Vba,所以,我有一个很好的小子程序,可以删除表中除了一行以外的所有行 Sub ClearFormTableRows(sourceRange, countRange) Dim rowsCount As Integer, rowRangeName As Object rowsCount = Application.WorksheetFunction.CountA(countRange) With sourceRange Do Until rowsCount = 1 .ListO

所以,我有一个很好的小子程序,可以删除表中除了一行以外的所有行

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)。删除

但是,如果我注释掉其中任何一个调用,不管是哪个调用,它都会在该表上正确执行。但要求它同时做这两件事,它也不会做这两件事


我做错了什么?

试着这样做:我删除了
rowRangeName对象
,因为它不用于您问题中给定的代码段

  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
子ClearFormTableRows(ByRef sourceRange作为范围,ByRef countRange作为范围)
Dim rowsCount作为整数
作为列表对象的Dim objListObj
将objListRows设置为列表行
Set objListObj=sourceRange.ListObjects(1)
设置objListRows=objListObj.ListRows
rowsCount=Application.WorksheetFunction.CountA(countRange)
而rowsCount>1
“--只需重新确认,如果需要,可以先删除条件。
如果(rowsunt>1)和(rowsunt
参考:

PS:可能不相关,但请使用
ByRef
ByVal
明确声明参数:


子ClearFormTableRows(ByRef sourceRange作为范围,ByRef countRange作为范围)
:)

发布所有相关代码。您的意思是“下标超出范围”?很可能是excel抱怨列表对象没有第二行,因此如何分配
rowsCount
变量存在问题。这非常有效,感谢您的帮助。特别感谢您提供的链接,以便我能够理解发生了什么。很高兴您能成功地使用它
:D