macrosloggingVBA不创build相同的列图

这是我在Excel中的数据,我正试图从它创build一个列图

excel数据的图片

列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 

在这里输入图像说明