开发者

Drawing a chart with owc chartspace in userform vba excel

I have a little problem with my owc chartspace, I would like to draw a chart like in the picture but my problem is that it draws only for one series I would like to draw it for the 1 the 2 and the 3 I don't know how to do this.

I have a listbox and a combobox, I select from the list box the 1,2,3 and I select from the combobx y or z such that x is fixed.

Then I put the data in plage(1) for x and plage(2) for y but the problem is that it works only for the first item I select from the listbox ( in this picture the "1" )

Could you tell what is wrong in my code?

Drawing a chart with owc chartspace in userform vba excel

the vba code for drawing the chart into the userform is:

      Private Sub drow()
                                                                                                     Dim i, k As Integer, x As Integer
          Dim j As Integer
          Dim Table(), Plage(2)
          Dim id As Integer

          id = 1

         Do While ComboBox.Value <> idi(id, 1) 
           id = id + 1
          Loop 

          For i = Cht.SeriesCollection.Count To 1 Step -1
             Cht.SeriesCollection.Delete i - 1
          Next i

              k = 1
           ReDim Table(ListBox.ListCount)

        For i = 0 To ListBox.ListCount - 1 
          If ListBox.Selected(i) = True Then
             Table(k) = ListBox.List(i)
            k = k + 1
          End If
          Next i

    With Cht
    .HasLegend = True
     .Legend.Position = chLegendPositionBottom
         .HasTitle = True
        .Title.Caption = ComboBox.Text
       End With

  Cht.Type = C.chChartTypeColumnClustered3D

    With Cht
        'first serie
        .SeriesCollection.Add
        .SeriesCollection(0).Caption = sheet.Cells(2, 15 + id) 
        .SeriesCollection(0).DataLab开发者_Python百科elsCollection.Add
        .SeriesCollection(0).DataLabelsCollection(0).Position = chLabelPositionCenter
        .SeriesCollection(0).DataLabelsCollection(0).Font.Color = RGB(255, 255, 255)

        .SeriesCollection.Add
        .SeriesCollection(1).Caption = sheet.Cells(2, 20)      .SeriesCollection(1).DataLabelsCollection.Add
        .SeriesCollection(1).DataLabelsCollection(0).Position = chLabelPositionCenter
        .SeriesCollection(1).DataLabelsCollection(0).Font.Color = RGB(255, 255, 255)

        .SetData C1.chDimCategories, C1.chDataLiteral, Table

        End With

   For j = 0 To ListBox.ListCount - 1
    If ListBox.Selected(j) = True Then

     Plage(1) = sheet.Cells(j + 3, 15 + id) 'the Xs
     Plage(2) = sheet.Cells(j + 3, 20) 'Les 'the Ys

      With Cht

        .SeriesCollection(0).SetData C1.chDimValues, C1.chDataLiteral, Plage(1)
        .SeriesCollection(1).SetData C1.chDimValues, C1.chDataLiteral, Plage(2)


      End With
    Erase Plage
   End If
  Next j

  End Sub


I am very new to the whole owc and VB thing and I am having some troubles myself, but have you tried using C1.chDimXValues and C1.chDimYValues instead of the chDimValues in the below statement:

.SeriesCollection(0).SetData C1.chDimValues, C1.chDataLiteral, Plage(1) .SeriesCollection(1).SetData C1.chDimValues, C1.chDataLiteral, Plage(2)

Sorry if this might sound trivial, I can see your coding skills are much more advanced than mine. Good luck!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜