Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
声明自定义工作表名称时VBA中出现对象必需错误_Vba_Excel - Fatal编程技术网

声明自定义工作表名称时VBA中出现对象必需错误

声明自定义工作表名称时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

嗨,我有下面的代码来移动数据。当使用默认图纸名称时,此操作非常有效。但是,当我为图纸使用不同的名称(而不是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).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