运行时错误:1004应用程序定义或对象定义的错误

问题描述:

我得到一个运行时错误,当我运行下面的代码:运行时错误:1004应用程序定义或对象定义的错误

Application.ScreenUpdating = False 
Application.Calculation = xlCalculationAutomatic 
Application.DisplayStatusBar = False 
Application.EnableEvents = False 

Dim c, OrgList, vtList, FndRng As Range 
Dim Tbl As ListObject 
Dim NewRow As ListRow 
Dim Org, Track As Worksheet 

Set Org = ActiveWorkbook.Worksheets("Org List") 
Set Track = ActiveWorkbook.Worksheets("Visit Tracking Sheet") 
Set Tbl = Track.ListObjects("TrackTbl") 
Set OrgList = Org.Range(Cells(2, 1), Cells(Org.UsedRange.Rows.Count, 1)) 
Set vtList = Track.Range("TrackTbl[Org ID]") 

一切都正常运行,直到我去Set ChngList = Track.Range("TrackTbl[Org ID]")会抛出Run-time Error: 1004。我也曾尝试以下替换线,所有这些都抛出了同样的错误:

  • Set vtList = Tbl.Range(Cells(2, 1), Cells(ListRows.Count, 1))
  • Set vtList = Track.Range(Cells(2, 1), Cells(Track.UsedRange.Rows.Count, 1))
  • Set vtList = Track.Tbl.Range(Cells(2, 1), Cells(ListRows.Count, 1))
  • Set vtList = Tbl.Range

我在这个亏损一个并且很难​​找到解决方案。我认为这是在表中设置范围引用单元格的问题,但我不确定。

+0

代码的其余部分在哪里?我没有看到你在哪里定义'ChngList' – dwirony

+1

请看看[this](https://stackoverflow.com/questions/36368220/is-the-in-range-necessary-when-defined-by-cells)的答案你的问题 –

+0

@dwirony对不起,这应该说'Set vtList',因为它显示在我发布的代码的最后一行。 –

感谢Siddharth Rout指出我在这个正确的方向。

答案涉及两个问题,我没有注意到。首先是错误实际发生在Set OrgList行而不是Set vtList行。错误是由于即使我引用了正确的工作表而没有With行,我必须在该行的每个点处引用该工作表。校正后的代码如下:

Application.ScreenUpdating = False 
Application.Calculation = xlCalculationAutomatic 
Application.DisplayStatusBar = False 
Application.EnableEvents = False 

Dim c, OrgList, vtList, FndRng As Range 
Dim Tbl As ListObject 
Dim NewRow As ListRow 
Dim Org, Track As Worksheet 

Set Org = ActiveWorkbook.Worksheets("Org List") 
Set Track = ActiveWorkbook.Worksheets("Visit Tracking Sheet") 
Set Tbl = Track.ListObjects("TrackTbl") 
Set OrgList = Org.Range(Org.Cells(2, 1), Org.Cells(Org.UsedRange.Rows.Count, 1)) 
Set vtList = Track.Range("TrackTbl[Org ID]") 

我可以使用With消除需要引用片在各线Range.Cells,但它本来的码相同的量和片材的名称是短。无论哪种方式都应该适用于遇到这个问题的任何人。