声明自定义工作表名称时VBA中出现对象必需错误
嗨,我有下面的代码来移动数据。当使用默认图纸名称时,此操作非常有效。但是,当我为图纸使用不同的名称(而不是sheet1、sheet2)时,会出现“需要对象”错误 这里“延迟”是表1,“TP”是表2 有人能指导我如何修理它吗声明自定义工作表名称时VBA中出现对象必需错误,vba,excel,Vba,Excel,嗨,我有下面的代码来移动数据。当使用默认图纸名称时,此操作非常有效。但是,当我为图纸使用不同的名称(而不是sheet1、sheet2)时,会出现“需要对象”错误 这里“延迟”是表1,“TP”是表2 有人能指导我如何修理它吗 Sub sbMoveData() Dim lRow As Integer, i As Integer, j As Integer 'Find last roe in Sheet1 lRow = Latency.Cells.SpecialCells(xlLastCell).Ro
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
结束子节点尝试以下操作:
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
试试这个:
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
你在排队的时候做对了
Worksheets("Latency").Range("M" & i).Copy Destination:=Worksheets("TP").Range("A" & j)
但之前,您使用了Latency
,就好像它是一个对象,而它只是一个名称。要通过名称获取图纸对象,请始终使用图纸(“名称”)
,或工作表(“名称”)
你在排队的时候做对了
Worksheets("Latency").Range("M" & i).Copy Destination:=Worksheets("TP").Range("A" & j)
但之前,您使用了Latency
,就好像它是一个对象,而它只是一个名称。要通过名称获取图纸对象,请始终使用图纸(“名称”)
,或工作表(“名称”)
执行
Sheet1.Range
时,您引用的是VBA自动为您声明的全局范围工作表
对象。默认情况下,“free”对象指向此工作簿。工作表(“Sheet1”)
,使用它而不是从工作表
集合中获取完全相同的对象引用是一个非常好的主意
现在,如果您将Sheet1
工作表标记为“延迟”,那么您已经设置了它的名称
,而不是它的代码名
——VBA使用它来创建您可以在代码中使用的全局标识符。您可以在“属性”工具窗口(F4)中进行更改:
请注意(名称)
(第一个)属性仍然显示“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
集合可以包含图表,而不仅仅是工作表-当您从集合(例如,从运行时创建的工作表)中获取工作表对象引用时,您应该使用工作表
集合来执行此操作
您还应该正确查看您的代码(免责声明:此链接指向我的宠物项目的网站)。当您执行
Sheet1.Range
时,您引用的是VBA自动为您声明的全局范围工作表
对象。默认情况下,“free”对象指向此工作簿。工作表(“Sheet1”)
,使用它而不是从工作表
集合中获取完全相同的对象引用是一个非常好的主意
现在,如果您将Sheet1
工作表标记为“延迟”,那么您已经设置了它的名称
,而不是它的代码名
——VBA使用它来创建您可以在代码中使用的全局标识符。您可以在“属性”工具窗口(F4)中进行更改:
请注意(名称)
(第一个)属性仍然显示“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
集合可以包含图表,而不仅仅是工作表-当您从集合(例如,从运行时创建的工作表)中获取工作表对象引用时,您应该使用工作表
集合来执行此操作
您还应该正确查看您的代码(免责声明:此链接指向我的宠物项目的网站)。相同的错误..指向
lRow=Latency.Cells.SpecialCells(xlLastCell.Row)
也许您只是更改了工作表的显示名称,而不是实际的工作表名称,所以请尝试将Latency.range()替换为工作表(“Latency”).range()相同的错误..指出lRow=Latency.Cells.SpecialCells(xlLastCell).Row
也许您只是更改了工作表的显示名称,而不是实际的工作表名称,所以请尝试将Latency.range()替换为工作表(“Latency”)。range()Latency显然是一个工作表,但是没有被调暗或设置在本小节的范围内。我将试着说出@Gary的学生在上面写的内容,在本sub
中,您是否有Dim Latency As Worksheet
,以及以后的Set Latency=Worksheets(“Yoursheetname”)
?稍后,您在工作表中正确使用它(“延迟”)
延迟显然是一个工作表,但未被调暗或设置在本小节的范围内。我将试着说明@Gary的学生在上面写的内容,在本子小节中,您是否将调暗延迟作为工作表
,以及以后的设置延迟=工作表(“Yoursheetname”)
?之后,您可以在工作表中正确使用它(“延迟”)
我尝试了这个,运行时没有出现错误。但是也没有结果。代码没有work@walterwhile然后是另一个错误,可能在工作表的数据中…可能没有匹配项。进入代码,看看是否找到匹配项。FWIW,这个问题解决了。我尝试了这个,没有错误w虽然在运行它,但也没有结果..代码没有work@walterwhile然后还有另一个错误,可能是工作表的数据中……可能没有匹配项。进入代码,看看是否找到匹配项。FWIW,这个问题解决了。FWIW我会选择LatencySheet
和TpSheet
,而不是Latency
和TP
.FWIW我会选择LatencySheet
和