在X轴上设置date

我试图在Excel VBA中创build一个图表,并且遇到了让X轴正确显示date的问题; 代码如下:

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循环中的属性variables被填充,并正确填充数组。

但是,尽pipe显示了散点图数据点,但轴上的date都显示为1900。

我尝试添加行:

  .Axes(xlCategory, xlPrimary).MinimumScale = CDbl(minDate) .Axes(xlCategory, xlPrimary).MaximumScale = CDbl(maxDate) 

沿轴显示正确的年份,但现在两个系列的所有数据点都消失了。

我已经尝试了一些其他的东西,但它纯粹是在试错的基础上。

数据如下

数据如下:

结果图表是:

正确的date,没有数据点

正确的日期,没有数据点

错误的date,但我们有数据点

错误的日期,但我们有数据点

即使我不同意他们对“普通”date格式的定义:q,我认为@chiliNUT正在进行某些工作。 date格式的强制似乎存在一些问题。

如果您将所有Datetypesvariables更改为DoubleLong ,则应该可以工作。

例如改变

 ReDim detached_date(detachedProps.count - 1) As Date 

 ReDim detached_date(detachedProps.count - 1) As Double 

要么

 ReDim detached_date(detachedProps.count - 1) As Long 

这样,date不会被XValues方法转换成String 。 它们被存储为date序列号,并且轴例程能够成功地将它们转换成本地date格式。

你的代码中发生了什么, Datetypes被XValues方法强制转换为String ,而轴渲染例程似乎无法将它们强制转换回date。

我不认为它实际上涉及到国际设置,因为我使用这样的date尝试它:

 1/01/2013 1/01/2014 1/01/2015 1/01/2016 1/01/2017 1/01/2018 1/01/2019 1/01/2020 1/01/2021 

在任一系统中工作。

我认为它只是一个轴渲染例程中的一个错误,它无法将string强制转换为date。

我会有兴趣听到别人比我更有知识的。

另外,我很好奇这个:

 .SeriesCollection.NewSeries .SeriesCollection(DETACHED).Name = "Detached" .SeriesCollection(DETACHED).Values = detached_price .SeriesCollection(DETACHED).XValues = detached_date 

它如何知道参考哪个系列? 被隔离是你在别处定义的常量吗?

我会认为这会更好:

 with objChart.SeriesCollection.NewSeries .Name = "Detached" .Values = detached_price .XValues = detached_date end with