Vba 选择单元格范围会引发运行时错误';1004';
我正在编写一个VBA问题,它查找被认为无效的行,将行号保存在名为Vba 选择单元格范围会引发运行时错误';1004';,vba,excel,Vba,Excel,我正在编写一个VBA问题,它查找被认为无效的行,将行号保存在名为invalidRowsToDelete的数组中,并通过构建无效行的字符串(例如1:1、4:4、7:7)来删除所选行 但是,它有时工作,有时不工作,但在大量无效行的情况下会更加一致地失败 它返回的错误是:运行时错误“1004”:对象“\u global”的方法范围失败“在Set rng=range(invalidRowsToDelete) 公共rng As范围 __________________________ Dim invali
invalidRowsToDelete
的数组中,并通过构建无效行的字符串(例如1:1、4:4、7:7
)来删除所选行
但是,它有时工作,有时不工作,但在大量无效行的情况下会更加一致地失败
它返回的错误是:运行时错误“1004”:对象“\u global”的方法范围失败“在Set rng=range(invalidRowsToDelete)
公共rng As范围
__________________________
Dim invalidRowsToDelete作为字符串
我想我会坚持多久
对于i=LBound(InvalidFilesArr)到UBound(InvalidFilesArr)
如果无效文件(i)“,则
invalidRowsToDelete=invalidRowsToDelete和InvalidFilesArr(i)和“&InvalidFilesArr(i)和”
其他的
退出
如果结束
接下来我
'生成范围语句并从RowsToDelete语句中删除尾随逗号
invalidRowsToDelete=”“&左(invalidRowsToDelete,Len(invalidRowsToDelete)-1)和“”
调试。打印invalidRowsToDelete
工作表(“表1”)。激活
设置rng=范围(invalidRowsToDelete)#####问题行
rng.选择
rng.删除
这已经困扰了我很长一段时间了,我无法找出它导致这个错误的原因
谢谢为什么不先删除那里的行,然后在找到它们时再删除呢
Public rng As Range
Dim invalidRowsToDelete As String
Dim i As Long
Worksheets("Sheet1").Activate
For i = LBound(InvalidFilesArr) To UBound(InvalidFilesArr)
If InvalidFilesArr(i) <> "" Then
Set rng = Range(InvalidFilesArr(i) & ":" & InvalidFilesArr(i))
rng.Select
rng.Delete
Else
Exit For
End If
Next i
公共rng As范围
Dim invalidRowsToDelete作为字符串
我想我会坚持多久
工作表(“表1”)。激活
对于i=LBound(InvalidFilesArr)到UBound(InvalidFilesArr)
如果无效文件(i)“,则
设置rng=范围(无效文件夹(i)和“&无效文件夹(i))
rng.选择
rng.删除
其他的
退出
如果结束
接下来我
使用字符串构建复杂的范围引用通常是个坏主意。我将使用循环来构建范围,而不是描述范围的字符串
Public rng As Range
__________________________
Dim invalidRowsToDelete As String
Dim i As Long
i = LBound(InvalidFilesArr)
Set rng = Worksheets("Sheet1").Rows(InvalidFilesArr(i))
For i = LBound(InvalidFilesArr) + 1 To UBound(InvalidFilesArr)
If InvalidFilesArr(i) = "" Then
Exit For
End If
Set rng = Union(rng, Worksheets("Sheet1").Rows(InvalidFilesArr(i)))
Next i
rng.Delete
你的字符串是“坏的”;要了解更换原因,请执行以下操作:
Set rng = Range(invalidRowsToDelete)
与:
在子部分的底部包括:
GhostBusters:
MsgBox Len(invalidRowsToDelete)
MsgBox invalidRowsToDelete
On Error GoTo 0
使用
Union
获取要删除的范围,然后在此范围内调用Delete
。嗯
Dim rngToDelete As Range
Dim rngRow As Range
Dim rowsToDelete(0 To 5) As Long
Dim i As Long
rowsToDelete(0) = 2
rowsToDelete(1) = 5
rowsToDelete(2) = 7
rowsToDelete(3) = 9
rowsToDelete(4) = 10
rowsToDelete(5) = 12
For i = LBound(rowsToDelete) To UBound(rowsToDelete)
Set rngRow = ActiveSheet.Rows(rowsToDelete(i))
If rngToDelete Is Nothing Then
Set rngToDelete = rngRow
Else
Set rngToDelete = Application.Union(rngToDelete, rngRow)
End If
Next i
if Not rngToDelete Is Nothing Then rngToDelete.Delete
我的猜测是,虽然我找不到任何支持它的东西,但您的字符串太长,溢出了
range
方法。限制似乎是255。这样做需要小心。删除第5行后,原来的第10行现在是第9行。如前所述,您将删除错误的行。如果将i=LBound(InvalidFilesArr)的更改为UBound(InvalidFilesArr)
更改为i=UBound(InvalidFilesArr)的更改为LBound(InvalidFilesArr)步骤-1
。
GhostBusters:
MsgBox Len(invalidRowsToDelete)
MsgBox invalidRowsToDelete
On Error GoTo 0
Dim rngToDelete As Range
Dim rngRow As Range
Dim rowsToDelete(0 To 5) As Long
Dim i As Long
rowsToDelete(0) = 2
rowsToDelete(1) = 5
rowsToDelete(2) = 7
rowsToDelete(3) = 9
rowsToDelete(4) = 10
rowsToDelete(5) = 12
For i = LBound(rowsToDelete) To UBound(rowsToDelete)
Set rngRow = ActiveSheet.Rows(rowsToDelete(i))
If rngToDelete Is Nothing Then
Set rngToDelete = rngRow
Else
Set rngToDelete = Application.Union(rngToDelete, rngRow)
End If
Next i
if Not rngToDelete Is Nothing Then rngToDelete.Delete