【问题标题】:Record a VBA Macro to Format Series of Pivot Charts on Excel录制 VBA 宏以在 Excel 上格式化一系列数据透视图
【发布时间】:2017-01-15 03:14:38
【问题描述】:

所以我有一堆需要格式化的数据透视图。我是 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】:

    我希望我正确理解了您的帖子。所以我更新了您的 Sub 以接收 2 个参数:Sht As WorksheetChtName 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 preffer not to use ActiveSheet, but "Sheet1" , etc.
    
    End Sub
    

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

    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
    

    【讨论】:

    • 感谢 Shai 的回复。该代码更改了相同的图表。我希望能够点击另一个图表,运行宏,并按照我记录的方式格式化点击的图表。
    • 好的,那我再给你加个选项,试试Edit 1下的代码
    • 好的!这行得通——非常感谢Shai。那么,如果我想添加更多命令(更改绘图区域颜色、更改小数等),我将如何记录呢?或者这是我必须手动输入的内容?
    • 你可以录制一个宏,查看命令,然后修改它以适应这段代码
    • @TiDrizA 请标记为答案,因为我想我已经回答了你的帖子
    猜你喜欢
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多