录制VBAmacros以在Excel上设置数据透视图系列

所以我有一堆我需要格式化的数据透视图。 我是VBA的新手,但是想logging一个macros,然后用它来表示每个图表。 在这个代码中,我想用活动图表replace“图表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 

我希望我能正确理解你的文章。 所以我已经更新你的Sub来接收2个参数: Sht As WorksheetChtName As String

build议 :我认为最好远离ActiveSheet ,而是引用工作表,比如Worksheets("Sheet1")

我已经添加了另一个Sub TestChartUp()来testing这个解决scheme。

试试下面的代码:

 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 :实际select你想要格式化的图表时,运行下面的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