Я пытаюсь создать диаграмму в Excel VBA, и у меня возникают проблемы с тем, чтобы X-Axis отображал даты правильно; код ниже:Установка дат по оси X
Function CreateChart()
Dim objChart As Chart
ReDim detached_price(detachedProps.count - 1) As Double
ReDim detached_date(detachedProps.count - 1) As Date
ReDim semi_price(semiProps.count - 1) As Double
ReDim semi_date(semiProps.count - 1) As Date
Dim minDate As Date
Dim maxDate As Date
minDate = Date
Dim detachedCount As Integer
detachedCount = 0
Dim semiCount As Integer
semiCount = 0
Set objChart = Charts.Add
With objChart
.HasTitle = True
.ChartTitle.Characters.Text = "Price Paid"
.ChartType = xlXYScatter
.Location xlLocationAsNewSheet
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Date"
.Axes(xlCategory, xlPrimary).CategoryType = xlTimeScale
.Axes(xlCategory, xlPrimary).TickLabels.NumberFormat = "yyyy"
.Axes(xlCategory, xlPrimary).MinimumScaleIsAuto = True
.Axes(xlCategory, xlPrimary).MaximumScaleIsAuto = True
For Each prop In properties
Select Case prop.PropertyType
Case "Detached"
detached_price(detachedCount) = prop.Amount
detached_date(detachedCount) = prop.SellDate
detachedCount = detachedCount + 1
Case "Semi-detached"
semi_price(semiCount) = prop.Amount
semi_date(semiCount) = prop.SellDate
semiCount = semiCount + 1
End Select
If prop.SellDate < minDate Then
minDate = prop.SellDate
End If
If prop.SellDate > maxDate Then
maxDate = prop.SellDate
End If
Next
.SeriesCollection.NewSeries
.SeriesCollection(DETACHED).Name = "Detached"
.SeriesCollection(DETACHED).Values = detached_price
.SeriesCollection(DETACHED).XValues = detached_date
.SeriesCollection.NewSeries
.SeriesCollection(SEMI).Name = "Semi-Detached"
.SeriesCollection(SEMI).Values = semi_price
.SeriesCollection(SEMI).XValues = semi_date
End With End Function
Свойства переменной в цикле For..Each заполняется, и заполняет массивы правильно.
Однако, несмотря на то, что точки данных Scatter Graph показаны, даты на осях все показывают 1900.
Я попытался добавить следующие строки:
.Axes(xlCategory, xlPrimary).MinimumScale = CDbl(minDate)
.Axes(xlCategory, xlPrimary).MaximumScale = CDbl(maxDate)
Который показал правильные года вдоль оси, но теперь все точки данных для обеих серий исчезли.
Я пробовал еще несколько вещей, но это было чисто на основе проб и ошибок.
Данные следующего
Полученные диаграммы:
Правильные даты, нет точек данных
Неправильных дат, но у нас есть точки данных
Вы говорите, что свойства заполнены правильно, но даты не отображаются неправильно на оси? Таким образом, свойство на самом деле имеет правильную дату, но дата отображается по-разному при построении графика? Можете ли вы включить распечатку массива? – chiliNUT
@chilliNut, вот о чем это связано :) Я включил некоторые скриншоты, чтобы уточнить, что я имею в виду, а также необработанные данные, которые находятся в переменной свойств. –
Ах. Я предполагаю, что из-за того, что вы используете нестандартный формат даты (dd-mm-yyyy) вместо более общего (mm-dd-yyyy) excel задыхается и неправильно интерпретирует данные как дату, когда он намечает его – chiliNUT