在声明客户工作表名称时,VBA中的对象需要错误
嗨,我有下面的代码来移动数据。 这使用默认的工作表名称时正常工作。 但是,当我使用不同的名称为工作表(而不是sheet1,sheet2),我得到“对象需要”的错误。
这里“延迟”是sheet1,“TP”是sheet2。
有人可以指导我如何解决它?
Sub sbMoveData() Dim lRow As Integer, i As Integer, j As Integer 'Find last roe in Sheet1 lRow = Latency.Cells.SpecialCells(xlLastCell).Row j = 1 For i = 1 To lRow If UCase(Latency.Range("E" & i)) = "COMPATIBLE" And UCase(Latency.Range("O" & i)) = "Pass" Then Sheets("Latency").Range("M" & i).Copy Destination:=Sheets("TP").Range("A" & j) j = j + 1 End If Next
结束小组
你做的就行了
Worksheets("Latency").Range("M" & i).Copy Destination:=Worksheets("TP").Range("A" & j)
但之前,你使用Latency
就好像它是一个对象,而它只是一个名字。 要通过名称获取图纸对象,请始终使用sheets("name")
或Worksheets("name")
Sub sbMoveData() Dim lRow As Integer, i As Integer, j As Integer 'Find last roe in Sheet1 With Worksheets("Latency") lRow = .Cells.SpecialCells(xlLastCell).Row j = 1 For i = 1 To lRow If UCase(.Range("E" & i)) = "COMPATIBLE" And UCase(.Range("O" & i)) = "Pass" Then .Range("M" & i).Copy Destination:=Worksheets("TP").Range("A" & j) j = j + 1 End If Next End With End Sub
当您执行Sheet1.Range
,您引用了VBA自动为您声明的全局作用域Worksheet
对象。 该“免费”对象默认指向ThisWorkbook.Worksheets("Sheet1")
,并且使用它而不是从Worksheets
集合中获取完全相同的对象引用是一个非常好的主意。
现在,如果您将Sheet1
工作表标记为“延迟”,那么您已经设置了它的Name
,但不是它的代码Name
,而且它是VBA用来创build可在代码中使用的全局标识符的代码名称。 您可以在属性工具窗口(F4)中更改:
(Name)
(第一)属性仍然说“Sheet1”? 将其更改为Latency
,现在此代码变为有效:
lRow = Latency.Cells.SpecialCells(xlLastCell).Row
现在,一旦开始使用Latency
全局标识符, 就可以在任何地方使用它 – 不要去从ActiveWorkbook.Worksheets
或ActiveWorkbook.Sheets
集合中获取完全相同的工作表参考!
而不是这个:
Sheets("Latency").Range("M" & i).Copy
你做吧:
Latency.Range("M" & i).Copy
对另一张纸也一样。 请注意, Sheets
集合可以包含图表,而不仅仅是工作表 – 当您从集合(例如,从运行时创build的工作表)中获取工作表对象引用时,应该使用Worksheets
集合来完成此操作。
你也应该看看正确的缩进 (声明:这个链接指向我的宠物项目的网站)你的代码。
尝试这个:
If UCase(Latency.Range("E" & i)) = "COMPATIBLE" And UCase(Latency.Range("O" & i)) = "Pass" Then Worksheets("Latency").Range("M" & i).Copy Destination:=Worksheets("TP").Range("A" & j) j = j + 1 End If