录制 VBA 宏以格式化 Excel 上的一系列数据透视图

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

所以我有一堆需要格式化的数据透视图。我是 VBA 新手,但想录制一个宏,然后将其用于每个图表。在此代码中,我想将“Sheet 5”替换为活动图表。谁能帮我解决这个问题吗?

这是目前的代码:

Sub ChartUp()
' ChartUp Macro AddChartDetails Keyboard Shortcut: Ctrl+Shift+E

ActiveSheet.ChartObjects("Chart 5").Activate
ActiveSheet.ChartObjects("Chart 5").Activate

ActiveChart.Axes(xlValue, xlSecondary).Select
Selection.TickLabels.NumberFormat = "0.00%"
Selection.TickLabels.NumberFormat = "0%"
ActiveChart.Legend.Select
ActiveChart.Legend.Select
Selection.Position = xlBottom
ActiveChart.ChartArea.Select

ActiveSheet.Shapes("Chart 5").ScaleWidth 1.3668124563, msoFalse, _
    msoScaleFromTopLeft
ActiveSheet.Shapes("Chart 5").ScaleHeight 1.3356401384, msoFalse, _
    msoScaleFromBottomRight

End Sub
vba excel pivot-table
1个回答
1
投票

我希望我正确理解了你的帖子。我已更新您的 Sub 以接收 2 个参数:

Sht As Worksheet
ChtName As String

建议:我认为最好远离

ActiveSheet
,而是参考工作表,例如
Worksheets("Sheet1")

我添加了另一个

Sub TestChartUp()
只是为了测试这个解决方案。

试试这个代码:

Option Explicit

Sub ChartUp(Sht As Worksheet, ChtName As String)

' ChartUp Macro AddChartDetails Keyboard Shortcut: Ctrl+Shift+E
Dim ChtObj As ChartObject

Set ChtObj = Sht.ChartObjects(ChtName) 

With ChtObj
    .Chart.Axes(xlValue, xlSecondary).TickLabels.NumberFormat = "0%"
    .Chart.Legend.Position = xlLegendPositionBottom
End With

With Sht.Shapes(ChtName )
    .ScaleWidth 1.3668124563, msoFalse, msoScaleFromTopLeft
    .ScaleHeight 1.3356401384, msoFalse, msoScaleFromBottomRight
End With
    
End Sub

'================================================================

Sub TestChartUp()

Call ChartUp(ActiveSheet, "Chart 5") '<-- I prefer not to use ActiveSheet, but "Sheet1" , etc.

End Sub

编辑 1:实际选择要格式化的图表时运行下面的子程序。

Option Explicit

Sub ChartUp()

' ChartUp Macro AddChartDetails Keyboard Shortcut: Ctrl+Shift+E
Dim Sht As Worksheet
Dim ChtObj As ChartObject

Set Sht = ActiveSheet
Set ChtObj = ActiveChart.Parent

With ChtObj
    .Chart.Axes(xlValue, xlSecondary).TickLabels.NumberFormat = "0.00%"
    .Chart.Legend.Position = xlLegendPositionBottom
End With

With Sht.Shapes(ChtObj.Name)
    .ScaleWidth 1.3668124563, msoFalse, msoScaleFromTopLeft
    .ScaleHeight 1.3356401384, msoFalse, msoScaleFromBottomRight
End With
    
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.