从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