2013-02-20 74 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