以下代码运行完美。
Public Sub Macro1()
'Enter Today's date into A1 and A2 cells.
ActiveSheet.Range("A1").Value = Now()
ActiveSheet.Range("A2").Value = Now()
'Delete all charts
For i = ActiveSheet.Shapes.Count To 1 Step -1
If ActiveSheet.Shapes(i).Type = msoChart Then
ActiveSheet.Shapes(i).Delete
End If
Next i
'Add a chart.
With ActiveSheet.ChartObjects.Add(Left:=100, Top:=50, Width:=400, Height:=200)
.Name = "myChart"
.Chart.Axes(xlCategory).CategoryType = xlTimeScale
.Chart.Axes(xlCategory).TickLabels.NumberFormat = "MMM/YY"
End With
'Add a xlLine serie.
With ActiveSheet.ChartObjects("myChart").Chart.SeriesCollection.NewSeries
.ChartType = xlLine
.Name = "Example"
.Values = Array(100, 200, 300, 400, 500, 600)
.XValues = Array(45658, 45689, 45717, 45748, 45778, 45809)
End With
'Add a xlXYScatterLinesNoMarkers serie.
With ActiveSheet.ChartObjects("myChart").Chart.SeriesCollection.NewSeries
.ChartType = xlXYScatterLinesNoMarkers
.Name = "My Birthday"
.Values = Array(0, 800)
.XValues = ActiveSheet.Range("A1:A2")
'Points settings
.Points(1).ApplyDataLabels
.Points(1).DataLabel.ShowSeriesName = True
.Points(1).DataLabel.ShowCategoryName = False
.Points(1).DataLabel.ShowValue = False
.Points(1).DataLabel.Position = xlLabelPositionAbove
.Points(1).DataLabel.Orientation = xlUpward
.Points(1).DataLabel.Width = 200
.Points(1).DataLabel.Format.TextFrame2.AutoSize = msoAutoSizeShapeToFitText
End With
End Sub
我不想从 Excel 单元格中提取图表数据。
所以我尝试用这个来代替
.XValues = ActiveSheet.Range("A1:A2")
有了这个
.XValues = Array(Now(), Now())
但这次图表的输出被损坏了。
我怎样才能解决这个问题?
正如评论中所写:
写入时
.XValues = Array(Now(), Now())
,日期会隐式转换为字符串(格式化的日期)。找不到有关它的任何文档,只是使用您的代码观察它:在显示数据时,Excel 会尝试将该值放在 x 轴上。由于此轴包含日期,因此字符串会转换回数值,但会失败,因此 Excel 会假定值为“0”。它会扩展 x 轴,使其从 0(=1.1.1900)开始,并将系列放在最左侧。
最简单的方法是将数字表示值传递给图表(就像您已经为 x 轴所做的那样)。