破解Excel VBAmacros运行时错误'1004':对象'_Global'的方法'范围'失败

我有一个名为“隐藏完成”的macros,自4月份以来一直工作。 macros应该按完成datesorting项目,然后隐藏在完成date字段中具有数据的行。 出于某种原因,上周失败了,我一直无法确定哪里出了问题。 一个相同的macros正在另一个选项卡(表和字段名称不同的名称)上运行,它工作正常。 我没有发现任何线程堆栈溢出(或其他网站),足够接近我的问题,以协助。 这是macros:

Sub hideCompleted() ' ' showCompleted Macro ' Application.ScreenUpdating = False ' Range("A1").Select ActiveSheet.ListObjects("Table2").Range.AutoFilter Field:=1 ' sortDataByDate Macro ' ActiveWorkbook.Worksheets("Project List").ListObjects("Table2").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Project List").ListObjects("Table2").Sort.SortFields.Add _ Key:=Range("Table2[[#All],[Complete" & Chr(10) & "Date]]"), SortOn:=xlSortOnValues, _ Order:=xlAscending, DataOption:=xlSortTextAsNumbers With ActiveWorkbook.Worksheets("Project List").ListObjects("Table1").Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With ' ' hideCompleted Macro ' ' Range("A2").Select ActiveSheet.ListObjects("Table2").Range.AutoFilter Field:=1, Criteria1:="=" Application.ScreenUpdating = True End Sub 

Excel正在引起注意:运行时错误'1004':对象'_Global'的方法'范围'失败。

但debugging器中突出显示的代码是: 调试器中突出显示的代码

我已经检查了单个单元格中的字符数,看看是否超过了911个字符的限制(特别是注释列中的单元格 – F列)。 事实并非如此。 我也附上一个Excel工作表的图像,给出一个想法如何使用。 任何帮助表示赞赏。 在这里输入图像说明

如果你的问题是我认为的问题,那么许多其他的答案将解决它。

您为Key参数提供的参数不是完全限定的,所以它是隐式的:

 ActiveWorkbook.Worksheets("Project List").ListObjects("Table2").Sort.SortFields.Add _ Key:=ActiveSheet.Range("Table2[[#All],[Complete" & Chr(10) & "Date]]"), SortOn:=xlSortOnValues, _ Order:=xlAscending, DataOption:=xlSortTextAsNumbers 

当然,如果ActiveSheet是运行时"Project List"以外的任何表单,这可能会失败。

通过将Range对象限定到适当的工作表来解决它:

 Dim wsProjectList as Worksheet Set wsProjectList = ActiveWorkbook.Worksheets("Project List") wsProjectList.ListObjects("Table2").Sort.SortFields.Add _ Key:=wsProjectList.Range("Table2[[#All],[Complete" & Chr(10) & "Date]]"), _ SortOn:=xlSortOnValues, _ Order:=xlAscending, DataOption:=xlSortTextAsNumbers 

答案是错误行上的引用字段已被更改。 如果您将此公式中的字段名称更新为正确的那么代码将执行没有问题。

但是,在未来,通过索引号而不是字段名称来引用表格列可能更安全,除非您100%确定它不会更改。