Excel VBA Range.Find报错咨询:指定动态范围提示未找到对象
问题分析与解决方案
嘿,这个问题我太熟悉了!让我给你拆解一下为什么会出现“未找到对象”的错误:
错误根源
你写的代码里,ws.Range(Cells(begin,6),Cells(200000,6))存在一个隐性的工作表引用问题:
Cells(begin,6)和Cells(200000,6)没有明确指定所属的工作表对象ws,默认情况下它们会引用当前激活的工作表(ActiveSheet)。- 如果
ws不是当前激活的工作表,这就相当于你试图在ws的Range范围内引用另一个工作表的单元格,VBA自然会抛出“未找到对象”的错误。 - 而改成
F:F时,ws.Range("F:F")是直接在ws里引用整列,没有跨表冲突,所以能正常运行。
修复后的代码
只需要给所有Cells加上ws前缀,明确指定它们属于ws工作表即可:
begin = 1 Set FoundCell = ws.Range(ws.Cells(begin, 6), ws.Cells(200000, 6)).Find(What:=Content(i))
额外建议
写VBA时最好养成明确指定工作表对象的习惯,不要依赖默认的ActiveSheet或ThisWorkbook,这样代码更健壮,也能避免很多因为工作表切换引发的隐性错误。
内容的提问来源于stack exchange,提问作者Klapaucius
相关产品推荐
相关产品推荐

