Рисование диаграммы с помощью owc chartspace в пользовательской форме vba excel - PullRequest
0 голосов
/ 20 апреля 2011

У меня есть небольшая проблема с моим графиком owc, я хотел бы нарисовать диаграмму, как на картинке, но моя проблема в том, что она рисует только для одной серии, которую я хотел бы нарисовать для 1, 2 и 3 I не знаю как это сделать

У меня есть окно со списком и поле со списком, я выбираю из списка 1,2,3, и я выбираю из поля со списком y или z так, что x является фиксированным.

Затем я помещаю данные в plage (1) для x и plage (2) для y, но проблема в том, что они работают только для первого элемента, который я выбираю из списка (на этом рисунке «1»)

Не могли бы вы сказать, что не так в моем коде?

enter image description here

код vba для рисования диаграммы в пользовательской форме:

      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).DataLabelsCollection.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

1 Ответ

0 голосов
/ 13 мая 2011

Я очень плохо знаком со всем, что связано с owc и VB, и у меня возникли некоторые проблемы, но пытались ли вы использовать C1.chDimXValues ​​и C1.chDimYValues ​​вместо chDimValues ​​в приведенном ниже утверждении:

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

Извинитеесли это звучит тривиально, я вижу, что ваши навыки кодирования намного более продвинуты, чем мои.Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...