含有查询表的工作表出现问题。我想根据层次结构对行/列进行分组,下面的代码适用于所有内容,但带有查询表的工作表(通过 Power Query 提供)除外。
即使内置了错误处理程序,代码似乎也在避免它们。
给我合适的代码是.. ** 出错时继续下一步 与 ws.Outline .SummaryRow = xlAbove 结束于 出错时转到 0**
Sub update_default_row_column_groupings()
Dim ws As Worksheet
'Dim lrow As Long
Dim i As Long
Dim rng As Range
Set ws = ThisWorkbook.Worksheets("365 Day")
On Error GoTo err_exit
Application.ScreenUpdating = False
On Error Resume Next
For i = 1 To 8
ws.Range("A1:A500").ClearOutline
ws.Range("A1:Z1").ClearOutline
Next i
Err.Clear
On Error GoTo err_exit
'ws.Rows.Hidden = False
'ws.Columns.Hidden = False
ws.Cells.Columns("E:F").Group
ws.Cells.Columns("I:J").Group
ws.Cells.Columns("M").Group
ws.Cells.Columns("Q:R").Group
group_rows_hierarchy_level ws, hierarchy_level:="region", group_column:=1, start_row:=6
group_rows_hierarchy_level ws, hierarchy_level:="division", group_column:=1, start_row:=5
err_exit:
Application.ScreenUpdating = False
End Sub
Sub group_rows_hierarchy_level(ByVal ws As Worksheet, hierarchy_level As String, group_column As Long, start_row As Long)
'groups rows between instances of 'hierarchy_level' in 'group_column'
Dim rng As Range
Dim group_ranges As Scripting.Dictionary
Set group_ranges = New Scripting.Dictionary
last_row = ws.Cells(ws.Cells.Rows.Count, group_column).End(xlUp).Row
group_start_row = 0
group_end_row = 0
For i = start_row To last_row
previous_val = ws.Cells(i - 1, group_column).Value
current_val = ws.Cells(i, group_column).Value
If LCase(current_val) = LCase(hierarchy_level) Then
If group_start_row = 0 Then
group_start_row = i + 1
ElseIf group_end_row = 0 Then
If LCase(previous_val) = "division" And LCase(hierarchy_level) = "region" Then
group_end_row = i - 2
Else
group_end_row = i - 1
End If
Rows("" & group_start_row & ":" & group_end_row).Group
group_start_row = i + 1
group_end_row = 0
End If
End If
Next i
ws.Rows("" & group_start_row & ":" & last_row).Group
On Error Resume Next
With ws.Outline
.SummaryRow = xlAbove
End With
On Error GoTo 0
End Sub
此错误似乎实际上是 Excel 错误。我也遇到了同样的问题,通过一些测试找到了解决方案。
显然,仅当选定范围 (Excel.Selection) 属于 QueryTable 时才会发生错误。
因此,在 Microsoft 修复此问题之前,可以采用以下解决方法:
执行导致错误的语句时,请确保工作表中选择的Range不属于QueryTable。 (英国选择表格外的任何单元格)