【发布时间】:2018-12-31 03:28:58
【问题描述】:
在我的工作簿中,我有一个简单的工作表(“Master”),其中包含一个表格(“Table1”)和两个单元格的命名范围(“filter_input”)。该表包括条件格式,可突出显示包含“filter_input”范围内任一单元格值的任何行。然后对表格进行排序以将突出显示的行放在表格的顶部。手动刷新表格排序(Ctrl-Alt-L)绝对没问题。
为了实现自动化,我设置了 Worksheet_change 以识别“filter_input”范围内的变化,如果是这样,表格的过滤和排序应该会自动刷新。我有以下情况:
Private Sub Worksheet_Change(ByVal target As Range)
Set isect_filter = Application.Intersect(target, Range("filter_input"))
If isect_filter Is Nothing Then
Else
ActiveWorkbook.Worksheets("Master").ListObjects("Table1").AutoFilter.ApplyFilter
With ActiveWorkbook.Worksheets("Master").ListObjects("Table1").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If
End Sub
此代码在过去 12 个月内一直运行没有问题,但今天打开工作簿时,触发代码导致运行时错误:
对象“ListObject”的方法“AutoFilter”失败。
高亮线:
ActiveWorkbook.Worksheets("Master").ListObjects("Table1").AutoFilter.ApplyFilter
我没有更改代码或文档中的任何内容,我能想到的唯一更改是我最近收到了一台新笔记本电脑并且正在运行 Office 365。我很难相信这会是问题所在,但我看不出还有什么变化。我在不同的工作簿中也有几乎相同的代码,这也给了我与今天相同的错误。
如果我注释掉该行,我会收到类似的错误,指的是以下行和方法“排序”。我检查了其他刷新排序的方法,但它们似乎都不起作用。
我什至尝试使用宏记录器来记录重新应用过滤器(或 Ctrl-Alt-L)的操作,但是它记录的代码似乎错误:
Sub Macro1()
'
' Macro1 Macro
'
'
Range("C6:C7").DataFields
Range("C7").
ColorIndex.("Table1")..SubAddress
With ThemeColor.("Master").("Table1").
.Count = xlYes
.ActiveSheet = False
. = xlTopToBottom
. = xlPinYin
.
End With
End Sub
EDIT 26/07/2018 - Record Macro 生成的代码的第二次粘贴
这是录制宏生成的代码的另一个粘贴 - 这次没有单元格选择或任何其他内容,除了按 Ctrl-Alt-L 刷新表格。我还通过功能区菜单(主页选项卡 > 编辑 > 排序和筛选 > 重新应用)运行了相同的功能,生成的代码是相同的。
Sub Macro3()
'
' Macro3 Macro
'
'
ColorIndex.("Table1")..SubAddress
With ThemeColor.("Master").("Table1").
.Count = xlYes
.ActiveSheet = False
. = xlTopToBottom
. = xlPinYin
.
End With
End Sub
【问题讨论】:
-
那个录制的宏看起来很……奇怪。这就是你执行动作时记录的内容?你能试着再录一次然后重新发布吗?在我看来,当您最初使用表格时,现在您正在使用数据透视表?
-
您确定表格的名称仍然是
Table1并且表格名称没有被修改?自动筛选是否已打开或位置错误? -
1) 您正在使用活动工作簿,这是唯一打开的工作簿吗? 2)你必须同时检查“Master”和“Table1”,最好同时命名它们,不要再担心了。
-
@dwirony - 我最初的帖子末尾包含的第二次代码粘贴。是的,我觉得这很奇怪。在我遇到的任何一个文档中都没有数据透视表。
-
@PGCodeRider Table 仍然被称为 Table1 并且工作表名称已经几个月没有被触及。自动过滤器仍然在正确的位置。对于我遇到相同问题的两个文档,也可以这样说。
标签: excel vba sorting autofilter listobject