2013-02-20 3 views
0

У меня есть макрос, который отображает данные для меня. Все, что касается макроса, работает с одним исключением: я хочу переименовать метки оси x. Макрос делает это, но он не делает это правильно. В некоторых случаях он сдвигает рамки, а в других - категорически неправильно. Предполагается, что макрос должен отображать данные по идентификатору продукта (один график на идентификатор продукта), а затем изменить категорию оси x на метку в столбце F в «Данные диаграммы».X Axis неправильно рисует

Заранее благодарю вас за помощь.

Ниже приводится часть макроса, который создает диаграммы, а затем меняет ось х:

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

+0

Мои диаграммы по-прежнему не возвращают правильные категории по оси x, но спасибо за указатель в любом случае, я чрезвычайно новичок в vba, поэтому пока не очень хорош. – nickJR

+0

Привет всем, Я выяснил, почему ось X не строит правильно, я не просто затрудняюсь определить, как это исправить. Что происходит: для каждого кода продукта он сбрасывает ось x, начиная с F1 (я не понимаю, почему он начинается с F1, так как я назначил F2 в качестве начальной позиции), а затем использует столько строк, что столбец F, так как для каждого идентификатора продукта имеются наборы данных. Итак, для RAND RD002 имеется 8 наборов данных, поэтому он использует F1: F8; также имеется 12 наборов данных для RAND RD003, поэтому он использует F1: F12. Еще раз спасибо за любую помощь или прозрение, которое вы можете предложить. – nickJR

ответ

0

под «Изменением оси х на более организованный набор, я использовал следующий код:

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