-1

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
但是,如果我注释掉其中一个调用,不管哪个调用,它都会在该表上正确执行。但是要求它两者都做,它也不会做。

我究竟做错了什么?

4

1 回答 1

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

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

于 2013-02-03T12:58:40.487 回答