VBA Excel图表:在Date Axis上input数组作为XValue

我正在尝试使用VBA创build/修改带有Date x轴的Excel折线图,并使用数组而不是范围来分配Series.Xvalues:

Sub test() Dim c As Chart: Set c = ActiveChart With c.SeriesCollection(1) .XValues = Array(42228, 42229, 42235, 42277, 42338, 42613) .Values = Array(1, 2, 3, 4, 5, 6) End With End Sub 

问题是,当我运行时,.resulting .XValuestypes是Variant / String而不是Variant / Double,因此图表显示为x轴是文本轴而不是date轴(即点均匀间隔沿着x轴):

在这里输入图像说明

但是,如果我保存文件,closures它,然后重新打开它神奇的出现作为一个date轴,点间隔沿X轴根据其真正的距离:

在这里输入图像说明

如果我在重新打开之后检查了Series.XValues对象,那么数组元素已经被转换成了Variant / Double。 我重新打开之前手动强制它们,但它导致Excel崩溃。 实际上,即使我只是复制图表,也足以使其正确显示,所以不知何故,Excel“知道”它是一个date坐标轴,但并没有如此显示。 我将不得不使用它作为解决scheme(即每当我更改图表时复制并删除旧的),但是它非常笨重,我想知道这里发生了什么。 我发现这个http://www.ozgrid.com/forum/showthread.php?t=66504,但他似乎没有相同的问题。 我正在使用Excel 2010。

当我在即时窗口中执行这个expression式时:

 TypeName(Array(42228, 42229, 42235, 42277, 42338, 42613)(1)) 

VBA返回“长”。 所以我相信你的input已经是数字了。

我认为Excel是“帮助你”,将你的刻度标签的数字格式改为非date格式。 你可以用这样的东西来改变格式:

 ch.Axes(xlCategory).TickLabels.NumberFormat = "m/d/yyyy" 

希望有所帮助

当您的X值数组传入时,它们不是date格式。 Excel,如此有用,决定轴不再是一个date比例轴。 但是你可以很容易地修复:

 Sub test() Dim c As Chart Set c = ActiveChart With c.SeriesCollection(1) .XValues = Array(42228, 42229, 42235, 42277, 42338, 42613) .Values = Array(1, 2, 3, 4, 5, 6) End With With c.Axes(xlCategory, xlPrimary) .CategoryType = xlTimeScale .TickLabels.NumberFormat = "m/dd/yy" End With End Sub 

我最初的想法是没有用的,就是把dateinput数值:

 Array(#8/12/2015#, #8/13/2015#, #8/19/2015#, #9/30/2015#, #11/30/2015#, #8/31/2016#) 

但是这使得该轴performance为文本轴,date间隔相等。 虽然select了“date轴”选项,但轴选项的其余部分与文本轴相同,但未显示date轴的date缩放部分。