0

昨天我在 Microsoft 对象文件夹和工作表中编写了一个 VBA 代码,以便在使用 Worksheets_PivotTableUpdate 事件和私有子过滤后重新格式化数据透视图。效果很好!

我昨天关闭并重新打开了该文件,但它已经消失了,尽管在打开 VBA 时它可以工作,但过滤并没有触发代码。我去看看工作表,那里没有代码。我以为我忘记保存或保存不正确所以我又写了一遍,今天早上我再次打开文件时...过滤代码后格式化不起作用,找不到代码。那么……它在哪里?为什么不省钱?

多人将使用这个文件,所以我不能每次需要时都重做它,而且每次关闭/重新打开文件时它就消失是没有意义的。我知道很多在 VBA 中工作的代码,尤其是在使用数据透视表/图表时,但我仍然认为自己是初学者。

我将重写代码,所以我会在完成后发布。这是最初格式化数据透视图的代码。工作表代码读取数据标签,添加一些边框,并更改甜甜圈孔的大小。

编辑:我发现了这个问题,这是一个愚蠢的问题。当工作簿宏运行时,它会删除存储其他代码的工作表。这是我的新问题......我还能如何存储它以防止这种情况发生?

Dim pc_utl As Chart Dim chart_rng_2 As Range Set chart_rng_2 = wsu.Range("B10:F35") '在工作表上放置圆环图的位置

With chart_rng_2
    Set pc_utl = wsu.ChartObjects.Add(Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height).Chart 'Creates donut chart if it doesn't exist already
End With

Application.ScreenUpdating = True

With pc_utl
    .ChartType = xlDoughnut 'Sets chart type to donut
    .ApplyDataLabels Type:=xlDataLabelsShowPercent 'Labels donut slices with % data from PTable
    .HasTitle = True
    .ChartTitle.Text = title_formula_2 'Dynamic chart title
    .Legend.Position = xlLegendPositionBottom
    .PlotBy = xlColumns
    .DoughnutGroups(1).DoughnutHoleSize = 25
End With
Else 'Refresh PivotTable and PivotChart if they exist already
    pt_utl.ChangePivotCache pivot_cache_2
    pt_utl.RefreshTable
End If

这是存储在工作表中的代码:

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
If Target = "%Utilization" Then
    With Worksheets("Utilization")
        With .ChartObjects("Chart 1").Chart
            .ApplyDataLabels Type:=xlDataLabelsShowPercent
        End With
    End With
End If

End Sub


4

0 回答 0