2017-03-02 60 views
0

我正在学习如何在Excel 2016中使用VBA for Excel。此刻,我正在通过此网站上的任务进行工作:http://www.homeandlearn.org/vba_charts_and_user_forms.html,其中我想显示散点图足球队的成绩之一。这是通过用用户表单中的组合框选择团队来完成的。使用UserForm添加SeriesCollection到图表(组合框)

代码的结果(见下文)应该是与一号线和标题的散点图,像这样: http://www.homeandlearn.org/images/vba_charts/chart_arsenal.gif(不能上传由于某种原因)

然而,这是结果我码。

enter image description here

这怎么可能,用完全相同的代码的网站上,图表无法显示所选数据和标题?我也想知道第五个系列从哪里来,因为我只有四列。

的代码如下(和独特的网站上描述的代码):

Private Sub cmdLoad_Click() 
    If cbSelect.Text = "Select a chart" Then 
     MsgBox "Please select a chart" 
     Exit Sub 
    End If 

    Dim MyChart As Chart 
    Dim ChartData As Range 
    Dim ChartIndex As Integer 
    Dim ChartName As String 

    ChartIndex = cbSelect.ListIndex 

    Select Case ChartIndex 
     Case 0 
      Set ChartData = ActiveSheet.Range("B2:B20") 
      ChartName = ActiveSheet.Range("B1").Value 
     Case 1 
      Set ChartData = ActiveSheet.Range("C2:C20") 
      ChartName = ActiveSheet.Range("C1").Value 
     Case 2 
      Set ChartData = ActiveSheet.Range("D2:D20") 
      ChartName = ActiveSheet.Range("D1").Value 
     Case 3 
      Set ChartData = ActiveSheet.Range("E2:E20") 
      ChartName = ActiveSheet.Range("E1").Value 
    End Select 

    Application.ScreenUpdating = False 

    Set MyChart = ActiveSheet.Shapes.AddChart(xlXYScatterLines).Chart 

    MyChart.SeriesCollection.NewSeries 
    MyChart.SeriesCollection(1).Name = ChartName 
    MyChart.SeriesCollection(1).Values = ChartData 
    MyChart.SeriesCollection(1).XValues = ActiveSheet.Range("A2:A20") 

    'Save chart as an image, remove the chart, then set updating screen to ON' 
    Dim imageName As String 
    imageName = ThisWorkbook.Path & "\gs16_pictures" & Application.PathSeparator & "TempChart.gif" 
    MyChart.Export Filename:=imageName, FilterName:="GIF" 
    ActiveSheet.ChartObjects(1).Delete 
    Application.ScreenUpdating = True 
    'Load picture in user form 
    UserForm1.Image1.Picture = LoadPicture(imageName) 

cbSelect初始化如下

Private Sub UserForm_Initialize() 
    cbSelect.AddItem Range("B1") 'Arsenal 
    cbSelect.AddItem Range("C1") 'Man City 
    cbSelect.AddItem Range("D1") 'Newcastle 
    cbSelect.AddItem Range("E1") 'Cardiff 
    cbSelect.TextAlign = fmTextAlignCenter 
End Sub 

回答

0

的问题是在声明中

Set MyChart = ActiveSheet.Shapes.AddChart(xlXYScatterLines).Chart 

此声明自动绘制整个数据表。为了防止它,有必要明确声明SourceData。下面是你需要的线路,而不是与MyChart.SeriesCollection

With MyChart 
    .SetSourceData Source:=ChartData 
    .HasTitle = True 
    .ChartTitle.Text = ChartName 
    .SeriesCollection(1).XValues = ActiveSheet.Range("A2:A20") 

End With 

开始我不知道为什么会出现的Excel 2016和从网站的例子之间的差异的代码。也许Excel比以前“更聪明”,并解释了源数据。