我在Excel中有一个表,它被过滤以仅显示某些数据,然后我需要逐行手动评估这些数据,以查看是否应该保留或删除它。
我在下面有一个宏来删除一行(通过按 Ctrl + d 激活),这在非过滤表上正常工作,但是当应用过滤器时我收到此错误 -
无法在过滤范围或表格中移动单元格
任何人都可以帮我修改宏,以便它可以使用过滤表吗?
Sub deleteTableRow()
Dim rng As Range
On Error Resume Next
With Selection.Cells(1)
Set rng = Intersect(.EntireRow, ActiveCell.ListObject.DataBodyRange)
On Error GoTo 0
If rng Is Nothing Then
MsgBox "Please select a valid table cell.", vbCritical
Else
rng.Delete xlShiftUp
End If
End With
End Sub
答案 0 :(得分:1)
好的,我明白了。
我不知道为什么,但从Shift
方法中移除Delete
参数有效。它最初显示一个提示,要求我确认删除,但在删除工作之前将DisplayAlerts
设置为false
(当然,之后又返回true
)。
Sub deleteTableRow()
Dim row As Range ' The table row to delete
On Error Resume Next
With Selection.Cells(1)
Set row = Intersect(.EntireRow, ActiveCell.ListObject.DataBodyRange)
On Error GoTo 0
If row Is Nothing Then
MsgBox "Please select a valid table cell.", vbCritical
Else
Application.DisplayAlerts = False
row.Delete
Application.DisplayAlerts = True
End If
End With
End Sub
答案 1 :(得分:0)
错误消息非常明确:您无法在已过滤的表格中执行此操作。
row.EntireRow.Delete
应该工作:)
答案 2 :(得分:0)
只是为了将来 - 当您在过滤视图中隐藏某些列时,这是正常错误。 删除整行是有效的,但并不总是建议(例如,当您的工作表中有多个表时)