无法使用VBA设置Outline类的.SummaryRow属性

问题描述 投票:0回答:1

含有查询表的工作表出现问题。我想根据层次结构对行/列进行分组,下面的代码适用于所有内容,但带有查询表的工作表(通过 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
vba powerquery
1个回答
0
投票

此错误似乎实际上是 Excel 错误。我也遇到了同样的问题,通过一些测试找到了解决方案。

显然,仅当选定范围 (Excel.Selection) 属于 QueryTable 时才会发生错误。

因此,在 Microsoft 修复此问题之前,可以采用以下解决方法:

执行导致错误的语句时,请确保工作表中选择的Range不属于QueryTable。 (英国选择表格外的任何单元格)

© www.soinside.com 2019 - 2024. All rights reserved.