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