2013-02-20 71 views
0

我有一个为我绘制数据的宏。关于宏的一切工作有1个例外:我想重新指定x轴标签。宏确实这样做,但它做得不对。在某些情况下,框架会改变类别,而在其他情况下,它会将类别标为完全错误的。该宏应根据产品ID(每个产品ID一个图表)绘制数据图表,然后将x轴类别更改为“图表数据”中F列的标签。X轴无法正确绘制

非常感谢您的帮助。

下面是创建图表的宏的一部分,并且随后改变x轴:

Sub MakeCharts() 
Dim sh As Worksheet 
Dim rAllData As Range 
Dim rChartData As Range 
Dim cl As Range 
Dim rwStart As Long, rwCnt As Long 
Dim chrt As Chart 

Set sh = ActiveSheet 
ActiveSheet.Range("a1").Select 
With sh 

' Get reference to all data 
    Set rAllData = .Range(.[A2], .[A2].End(xlDown)).Resize(, 5) 
    ' Get reference to first cell in data range 
    rwStart = 1 
    Set cl = rAllData.Cells(rwStart, 1) 
    Do While cl <> "" 
     ' cl points to first cell in a station data set 
     ' Count rows in current data set 
     rwCnt = Application.WorksheetFunction. _ 
      CountIfs(rAllData.Columns(1), cl.Value) 
     ' Get reference to current data set range 
     Set rChartData = rAllData.Cells(rwStart, 1).Resize(rwCnt, 5) 
     ' Create Chart next to data set 
     Set chrt = .Shapes.AddChart(xlLineMarkers, _ 
      rChartData.Width, .Range(.[A2], cl).Height).Chart 
     With chrt 
      .SetSourceData Source:=rChartData.Offset(0, 1).Resize(, 4) 
      ' -----> Set any chart properties here <----- 

      ' Add Title 
      .SetElement msoElementChartTitleCenteredOverlay 
      .ChartTitle.Caption = cl.Value 

      'Change chart name 
      .Parent.Name = cl.Value 

      'Remove Legend 
      .SetElement (msoElementLegendNone) 

      ' Adjust plot size to allow for title 
      .PlotArea.Height = .PlotArea.Height - .ChartTitle.Height 
      .PlotArea.Top = .PlotArea.Top + .ChartTitle.Height 

      'Change the x-axis to a more organized set 
      .SeriesCollection(1).XValues = "='Chart Data'!$F$2:$F$1048576" 

      'Set Max and Min for charts 
      .Axes(xlValue).MinimumScale = Sheets("Chart Data").Range("K1") 
      .Axes(xlValue).MaximumScale = Sheets("Chart Data").Range("K2") 

      'Adjust x-axis to tilt 45 degrees top left to bottom right 
      .Axes(xlCategory).TickLabels.Orientation = 45 



     End With 


     ' Get next data set 
     rwStart = rwStart + rwCnt 
     Set cl = rAllData.Cells(rwStart, 1) 
    Loop 

End With 
+0

** ='图表数据'!$ F $ 2:$ F $ 1048576“**!你已经有'rwCnt'了,所以把标签寄给那个范围:''='图表数据'!$ F $ 2:$ F $“&rwCnt' – SeanC 2013-02-20 20:43:34

+0

我的图表仍然没有返回正确的x轴类别,但是感谢指针,无论如何,我是非常新的vba,所以我还不是很擅长。 – nickJR 2013-02-21 12:33:10

+0

大家好,我是 我已经想出了为什么X轴不能正确绘图,我不只是无法确定如何解决这个问题。现在发生的情况是:对于每个产品代码,它重新设置从F1开始的x轴(我不明白为什么它从F1开始,因为我已经将F2指定为起始位置),然后使用多个行列F,因为每个产品ID都有数据集。因此,对于RAND RD002,有8个数据集,所以它使用F1:F8;同样,RAND RD003有12组数据,所以它使用F1:F12。 再次感谢您提供的任何帮助或见解。 – nickJR 2013-02-21 12:58:22

回答

0

下“的x轴更改为一个更加有组织集合,我用下面的代码:

.SeriesCollection(1).XValues = "='Chart Data'!" & rChartData.Offset(, 5).Resize(, 1).Address