Vba 工作表(n).范围。。。。返回运行时错误1004

Vba 工作表(n).范围。。。。返回运行时错误1004,vba,excel,Vba,Excel,VBA运行时错误1004“应用程序定义或对象定义错误” 当我运行此代码时返回。我搜索了Google/Stack Overflow,他们都告诉我指定范围,但有趣的是,错误发生在我指定范围之后。(在修改之前,它确实工作了,但返回了错误的结果) 工作表(2).范围(单元格(finderA.Row,rng2.Column),单元格(finderA.Row,rng2.Columns.Count+rng2.Column-1))。复制finalWS.Cells(rowCounter,rng1.Columns.

VBA运行时错误1004“应用程序定义或对象定义错误”

当我运行此代码时返回。我搜索了Google/Stack Overflow,他们都告诉我指定范围,但有趣的是,错误发生在我指定范围之后。(在修改之前,它确实工作了,但返回了错误的结果)

工作表(2).范围(单元格(finderA.Row,rng2.Column),单元格(finderA.Row,rng2.Columns.Count+rng2.Column-1))。复制finalWS.Cells(rowCounter,rng1.Columns.Count+2)

-->这是行返回错误

整个代码是我的长句的一部分,用于通过比较特定的公共值来检查两个数据之间的遗漏

在这段代码中,我基本上是在一个区域和另一个区域之间循环,并按顺序复制粘贴匹配的行(即,我正在用活页1,2制作活页3)

Dim行计数器为整数
行计数器=1
将每个单元格作为范围,每个单元格作为范围
将每个Cellla作为范围,将每个Cellbb作为范围
尺寸为StrFirstAdd的字符串,跨接为字符串
变暗finderA作为范围,finderB作为范围
对于addCellRngA中的每一个小球
使用addCellRngB
Set finderA=.Find(eachCellA.Value,LookIn:=xlValues,Lookat:=xlWhole)
以
如果不是,芬德拉什么都不是
eachCellA.EntireRow.Copy finalWS.Cells(行计数器,1)
StrFirstAdd=finderA.Address
斯特拉德=芬德拉地址
做
工作表(2).范围(单元格(finderA.Row,rng2.Column),单元格(finderA.Row,rng2.Columns.Count+rng2.Column-1))。复制finalWS.Cells(rowCounter,rng1.Columns.Count+2)**.##-->调试器在此处停止,返回错误。**
Set finderA=addCellRngB.FindNext(finderA)
斯特拉德=芬德拉地址
行计数器=行计数器+1
环而非芬德拉一文不值,跨越斯特尔菲斯塔德
其他的
eachCellA.EntireRow.Copy finalWS.Cells(行计数器,1)
行计数器=行计数器+1
如果结束
下一个
这是代码,所有值(finderA.Row、rng2.Column、rng2.Columns.count等)都不是空的,并且具有正确的值

我认为粘贴整行代码是不必要的,但如果您觉得原因不在代码中,请告诉我,我将非常乐意提供完整的代码

更换

Worksheets(2).Range(Cells(finderA.Row, rng2.Column), Cells(finderA.Row, rng2.Columns.Count + rng2.Column - 1)).Copy finalWS.Cells(rowCounter, rng1.Columns.Count + 2)

必须限定所有范围引用,包括单元格,否则后者可能引用不同的工作表(以运行代码时处于活动状态的为准)

您还可以从If中删除这一行,就像在任何一种情况下一样

eachCellA.EntireRow.Copy finalWS.Cells(rowCounter, 1)
并将循环条件更改为

Loop While StrAdd <> StrFirstAdd
在跨越StrFirstAdd时循环
更换

Worksheets(2).Range(Cells(finderA.Row, rng2.Column), Cells(finderA.Row, rng2.Columns.Count + rng2.Column - 1)).Copy finalWS.Cells(rowCounter, rng1.Columns.Count + 2)

必须限定所有范围引用,包括单元格,否则后者可能引用不同的工作表(以运行代码时处于活动状态的为准)

您还可以从If中删除这一行,就像在任何一种情况下一样

eachCellA.EntireRow.Copy finalWS.Cells(rowCounter, 1)
并将循环条件更改为

Loop While StrAdd <> StrFirstAdd
在跨越StrFirstAdd时循环

related:因此,为了安全起见,我认为在任何地方都要使用圆点,这样就不会出错。我以前在这里被抓过,因为我的行前没有一个点。伯爵。大多数情况下,你并不需要它,但为了安全起见……你结束了我的痛苦。我已经花了4天的时间在这上面,在我最后修改了你的代码之后,它现在结束了。我不知道该怎么感谢你。也许我应该在这方面努力学习,希望有一天能解决这个社区中其他人的麻烦。谢谢SJR,愿上帝保佑你。@zebralamy会马上告诉你,在检查中“'Cells'暗指的是活动工作表”,4天前结束了你的痛苦;-)我的荣幸。为了避免痛苦,下一次直奔橡皮狗!相关报道:所以我的结论是,为了安全起见,在任何地方使用圆点都不会出错。我以前在这里被抓过,因为我的行前没有一个点。伯爵。大多数情况下,你并不需要它,但为了安全起见……你结束了我的痛苦。我已经花了4天的时间在这上面,在我最后修改了你的代码之后,它现在结束了。我不知道该怎么感谢你。也许我应该在这方面努力学习,希望有一天能解决这个社区中其他人的麻烦。谢谢SJR,愿上帝保佑你。@zebralamy会马上告诉你,在检查中“'Cells'暗指的是活动工作表”,4天前结束了你的痛苦;-)我的荣幸。为了避免痛苦,下一次直奔橡皮狗!