macrosloggingVBA不创build相同的列图
这是我在Excel中的数据,我正试图从它创build一个列图
列A中的数据用于列标签,列B中的数据用于列高。
这是我正在寻找的图表的图片:
我需要通过VBA来做到这一点,所以我手动创build了graphics,同时logging一个macros。 我得到了这个代码:
Sub Macro5() Range("A1:B10").Select ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select ActiveChart.SetSourceData Source:=Range("Report!$A$1:$B$10") ActiveChart.FullSeriesCollection(1).Select ActiveChart.ChartGroups(1).Overlap = 0 ActiveChart.ChartGroups(1).GapWidth = 0 ActiveChart.ChartTitle.Select ActiveChart.ChartTitle.Text = "Frequency" Selection.Format.TextFrame2.TextRange.Characters.Text = "Frequency" With Selection.Format.TextFrame2.TextRange.Characters(1, 9).ParagraphFormat .TextDirection = msoTextDirectionLeftToRight .Alignment = msoAlignCenter End With With Selection.Format.TextFrame2.TextRange.Characters(1, 9).Font .BaselineOffset = 0 .Bold = msoFalse .NameComplexScript = "+mn-cs" .NameFarEast = "+mn-ea" .Fill.Visible = msoTrue .Fill.ForeColor.RGB = RGB(89, 89, 89) .Fill.Transparency = 0 .Fill.Solid .Size = 14 .Italic = msoFalse .Kerning = 12 .Name = "+mn-lt" .UnderlineStyle = msoNoUnderline .Spacing = 0 .Strike = msoNoStrike End With ActiveChart.ChartArea.Select End Sub
现在,当我再次运行此macros时,它不会给我logging此macros时创build的同一个图。
这是我运行macros时得到的graphics:
所以,我的问题是为什么这样做,如何解决? 我将如何制作一个graphics,就像我手动从我拥有的数据中手动创build的graphics?
录制macros对我来说根本不起作用,并且给我一个完全不同的graphics,正如你所看到的。
总结一下,我手动创build了一个graphics,并logging了一个macros,但是运行这个macros不会创build我之前创build的graphics。
以下是您需要复制图表的程序化步骤。
您最初必须遵循与图表向导所采用的步骤不同的步骤。 图表向导生成的代码并不总是有帮助的。
步骤:
- 在工作表中创build数据
- 用图表创build一个新的形状,并获得图表参考
- 将数据分配给图表
- 获得图表中的第一个系列
- 将标签分配给系列
- 更改图表第一个“ChartGroup”上的“GapWidth”属性以获得粗糙的外观
- 设置图表标题
只要把这个代码放到一个空的模块中运行就可以了:
Option Explicit Sub CreateGraph() Dim ws As Worksheet Dim rngLabels As Range Dim rngData As Range Dim shpChart As Shape Dim cht As Chart Dim srs As Series ' set a reference to worksheet Set ws = ThisWorkbook.Worksheets("Sheet1") ' get ranges for labels and data Set rngLabels = ws.Range("A1:A10") Set rngData = ws.Range("B1:B10") 'uncomment if you want to fake up some data for the this 'ws.Cells.Delete 'rngLabels.Value = WorksheetFunction.Transpose(Array(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)) 'rngData.Value = WorksheetFunction.Transpose(Array(0, 1, 4, 9, 4, 3, 6, 4, 8, 6)) ' create a chart shape, get chart reference and set source data Set shpChart = ws.Shapes.AddChart2(201, xlColumnClustered) Set cht = shpChart.Chart cht.SetSourceData Source:=rngData, PlotBy:=xlColumns ' update the series object with labels Set srs = cht.SeriesCollection(1) srs.XValues = rngLabels ' make the graph 'chunky' cht.ChartGroups(1).GapWidth = 0 ' set chart title cht.ChartTitle.Text = "Frequency" End Sub