У меня есть макрос, который отображает данные для меня. Все, что касается макроса, работает с одним исключением: я хочу переименовать метки оси 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
** "= 'Данные диаграммы'! $ F $ 2: $ F $ 1048576" **! у вас уже есть 'rwCnt', поэтому присваивайте метки этому диапазону:' '= 'Данные диаграммы'! $ F $ 2: $ F $" & rwCnt' – SeanC
Мои диаграммы по-прежнему не возвращают правильные категории по оси x, но спасибо за указатель в любом случае, я чрезвычайно новичок в vba, поэтому пока не очень хорош. – nickJR
Привет всем, Я выяснил, почему ось X не строит правильно, я не просто затрудняюсь определить, как это исправить. Что происходит: для каждого кода продукта он сбрасывает ось x, начиная с F1 (я не понимаю, почему он начинается с F1, так как я назначил F2 в качестве начальной позиции), а затем использует столько строк, что столбец F, так как для каждого идентификатора продукта имеются наборы данных. Итак, для RAND RD002 имеется 8 наборов данных, поэтому он использует F1: F8; также имеется 12 наборов данных для RAND RD003, поэтому он использует F1: F12. Еще раз спасибо за любую помощь или прозрение, которое вы можете предложить. – nickJR