从excel中查找并replace一个单词。 应用程序定义的或对象定义的错误
Set rng = ws.Range("A1", ws.Range("A1").End(xlDown)) For each cl in rng
运行时错误“1004”:
Application-defined or object-defined error in **Set rng = ws.Range("A1", ws.Range("A1").End(xlDown))**
请帮忙
Rory已经告诉过你代码的主要问题是什么。
我会build议一个稍微不同的方法来试图达到目的。
请注意, xlDown
避免xlDown
。 考虑只在单元格A1
中有数据的场景。 在这种情况下, xlDown
将select整个Col A.另一种方法是在Col A中find有数据的最后一行,然后创build您的范围。
With ws '~~> Find Last Row in Col A and then create the range '~~> oXL is the Excel Application If oXL.WorksheetFunction.CountA(.Cells) <> 0 Then lastrow = .Cells.Find(What:="*", _ After:=.Range("A1"), _ Lookat:=xlPart, _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, _ MatchCase:=False).Row Else lastrow = 1 End If Set Rng = ws.Range("A1:A" & lastrow) End With
并在顶部宣布这一点
Const xlPart As Long = 2 Const xlFormulas As Long = -4123 Const xlByRows As Long = 1 Const xlPrevious As Long = 2
如果您确定Col A中总是有数据,那么您也可以尝试一下
lastrow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row Set Rng = ws.Range("A1:A" & lastrow)
并在顶部宣布这一点
Const xlUp As Long = -4162
我怀疑你没有一个引用设置到Excel对象库,在这种情况下xlDown
没有价值。 可以使用:
Set rng = ws.Range("A1", ws.Range("A1").End(-4142))
或者,最好是自己定义模块的顶部:
Const xlDown as Long = -4142