Vba 运行时错误';1004';-方法';范围';对象的'_全球';删除行时失败
我试图一次删除工作表中的每一个奇数行,但它返回上述错误 代码:Vba 运行时错误';1004';-方法';范围';对象的'_全球';删除行时失败,vba,excel,Vba,Excel,我试图一次删除工作表中的每一个奇数行,但它返回上述错误 代码: 对于icount=endRow到第3步-2 strDelete=strDelete&“,”&icount&“:”&icount 下一个icount strDelete=右侧(strDelete,Len(strDelete)-1) 范围(strDelete).Delete shift:=xlUp'可以删除的行数没有限制,但是范围的.Address属性可以返回的字符数有限制(或者在本例中通过其索引器)。不要构建字符串,而是使用联合构建一
对于icount=endRow到第3步-2
strDelete=strDelete&“,”&icount&“:”&icount
下一个icount
strDelete=右侧(strDelete,Len(strDelete)-1)
范围(strDelete).Delete shift:=xlUp'可以删除的行数没有限制,但是范围
的.Address
属性可以返回的字符数有限制(或者在本例中通过其索引器)。不要构建字符串,而是使用联合构建一个实际范围
:
Dim toDelete As Range
For i = endRow To 3 Step -2
If toDelete Is Nothing Then
Set toDelete = Rows(i)
Else
Set toDelete = Union(toDelete, Rows(i))
End If
Next
toDelete.Delete shift:=xlUp
可以删除的行数没有限制,但是范围
的.Address
属性可以返回的字符数有限制(或者在本例中通过其索引器)。不要构建字符串,而是使用联合构建一个实际范围
:
Dim toDelete As Range
For i = endRow To 3 Step -2
If toDelete Is Nothing Then
Set toDelete = Rows(i)
Else
Set toDelete = Union(toDelete, Rows(i))
End If
Next
toDelete.Delete shift:=xlUp
我认为您一直在避免使用Union()
方法,因为它非常耗时
也许你还没去过
无论如何,这是很耗时的,当您有如此多的行要删除时,您必须使用范围
方法
如前所述,限制是传递给Range()
方法的字符串长度,似乎必须限制在250个字符左右(可能是256个…)
因此,让我们使用范围方法来适当缩短字符串
For icount = endRow To 3 Step -2
strDelete = strDelete & "," & icount & ":" & icount
Next icount
DeleteAddress Right(strDelete, Len(strDelete) - 1)
Sub DeleteAddress(ByVal address As String)
Dim arr As Variant
Dim iArr As Long
Dim partialAddress As String
arr = Split(address, ",")
iArr = LBound(arr)
Do While iArr < UBound(arr)
partialAddress = ""
Do While Len(partialAddress & arr(iArr)) + 1 <= 250 And iArr < UBound(arr)
partialAddress = partialAddress & arr(iArr) & ","
iArr = iArr + 1
Loop
If Len(partialAddress & arr(iArr)) <= 250 Then
partialAddress = partialAddress & arr(iArr)
iArr = iArr + 1
Else
partialAddress = Left(partialAddress, Len(partialAddress) - 1)
End If
Range(partialAddress).Delete shift:=xlUp
Loop
End Sub
对于icount=endRow到第3步-2
strDelete=strDelete&“,”&icount&“:”&icount
下一个icount
删除地址权限(strDelete,Len(strDelete)-1)
子删除地址(ByVal地址作为字符串)
作为变体的Dim-arr
暗淡如长
Dim partialAddress作为字符串
arr=拆分(地址“,”)
iArr=LBound(arr)
当iArr Do While Len(partialAddress&arr(iArr))+1我认为您一直在避免使用Union()
方法,因为它很耗时
也许你还没去过
无论如何,这是很耗时的,当您有如此多的行要删除时,您必须使用范围
方法
如前所述,限制是传递给Range()
方法的字符串长度,似乎必须限制在250个字符左右(可能是256个…)
因此,让我们使用范围方法来适当缩短字符串
For icount = endRow To 3 Step -2
strDelete = strDelete & "," & icount & ":" & icount
Next icount
DeleteAddress Right(strDelete, Len(strDelete) - 1)
Sub DeleteAddress(ByVal address As String)
Dim arr As Variant
Dim iArr As Long
Dim partialAddress As String
arr = Split(address, ",")
iArr = LBound(arr)
Do While iArr < UBound(arr)
partialAddress = ""
Do While Len(partialAddress & arr(iArr)) + 1 <= 250 And iArr < UBound(arr)
partialAddress = partialAddress & arr(iArr) & ","
iArr = iArr + 1
Loop
If Len(partialAddress & arr(iArr)) <= 250 Then
partialAddress = partialAddress & arr(iArr)
iArr = iArr + 1
Else
partialAddress = Left(partialAddress, Len(partialAddress) - 1)
End If
Range(partialAddress).Delete shift:=xlUp
Loop
End Sub
对于icount=endRow到第3步-2
strDelete=strDelete&“,”&icount&“:”&icount
下一个icount
删除地址权限(strDelete,Len(strDelete)-1)
子删除地址(ByVal地址作为字符串)
作为变体的Dim-arr
暗淡如长
Dim partialAddress作为字符串
arr=拆分(地址“,”)
iArr=LBound(arr)
当iArr 当Len(partialAddress&arr(iArr))+1是的,联盟很耗时,我会试试这个。谢谢没有更快的方法吗?像Rows(strDelete).Entirerow.Delete?我看到你为“最快”的东西写了一篇新文章。检查后我的答案第二个解决方案!至于这篇文章,请关闭它:或者选择一个答案,或者告诉回答者他们的答案没有解决问题的原因。是的,联盟很耗时,我会试试这个。谢谢没有更快的方法吗?像Rows(strDelete).Entirerow.Delete?我看到你为“最快”的东西写了一篇新文章。检查后我的答案第二个解决方案!对于这篇文章,关闭它:要么选择一个答案,要么告诉回答者他们的答案没有解决问题的原因