Добавьте два разных типа диаграмм в Excel и отформатируйте их - PullRequest
0 голосов
/ 28 августа 2018

У меня есть диаграмма, которая состоит из двух основных вещей.

Первый - это цикл, который создает серию рядов на основе значений. Каждая из этих серий представляет собой XY Scatter с линиями. Каждая из этих линий окрашена в зависимости от условий с использованием функции Vlookup в Excel. Первое, что мне нужно исправить, это часть Case, потому что ей не нравится первый экземпляр G. Это происходит только тогда, когда я добавляю второй график.

Следующее, что я хочу, это создать XY Scatter с другим диапазоном, а затем применить пользовательские метки данных только к этим точкам. Я могу изменить тип графиков для графиков серии, используя приведенный ниже ответ, который был обновлен.

    Dim age1 As Variant
    Dim age2 As Variant
    Dim per1 As Variant
    Dim per2 As Variant
    Dim id as Variant
    Dim mp as Range
    Dim yd as Range
    id = Range(Range("A2"), Range("A2").End(xlDown)).Value2
    age1 = Range(Range("C2"), Range("C2").End(xlDown)).Value2
    age2 = Range(Range("D2"), Range("D2").End(xlDown)).Value2
    per1 = Range(Range("E2"), Range("E2").End(xlDown)).Value2
    per2 = Range(Range("E2"), Range("E2").End(xlDown)).Value2
    Set mp = Range(Range("J2"), Range("J2").End(xlDown))
    Set yd= Range(Range("E2"), Range("E2").End(xlDown))

    ln = UBound(id) - LBound(id) + 1

    Set cht = ws.ChartObjects(1).Chart

        With cht
            .ChartArea.ClearContents 'Clears the chart so a new one can be created
            .ChartType = xlXYScatterLines 'Defines the Chart as a Scatter with Lines
            For i = 1 To ln 'First Thing that creates many series
                xdata = Array(age1(i, 1), age2(i, 1))
                ydata = Array(per1(i, 1), per2(i, 1))
                .SeriesCollection.NewSeries
                .SeriesCollection(i).XValues = xdata
                .SeriesCollection(i).Values = ydata
                .SeriesCollection(i).Name = id(i, 1)
            Next i

            'Orginal method: .ChartType = xlXYScatter 
               .SeriesCollection.NewSeries
               .SeriesCollection(.SeriesCollection.Count).XValues = mp
               .SeriesCollection(.SeriesCollection.Count).Values = yd
               .SeriesCollection(.SeriesCollection.Count).Name = "Series"
               'New Method
               .SeriesCollection(.SeriesCollection.Count).ChartType = xlXYScatter

        End With
'end of creating charts

        Set drng = Range(Range("A2"), Range("B2").End(xlDown) 'For the Vlookup
        With ActiveSheet
            For Each xycht In .ChartObjects
                For Each mysrs In xycht.Chart.SeriesCollection
                    mysrs.MarkerStyle = xlMarkerStyleCircle
                    lnum = Application.VLookup(mysrs.Name, drng, 2, 0) 'This fails the first instance with G as a Type Mismatch Error.
'                    Select Case lnum
'                        Case "G"
'                            lColor = RGB(255, 0, 0)
'                        Case "D"
'                            lColor = RGB(0, 255, 0)
'                        Case "M"
'                            lColor = RGB(0, 0, 255)
'                        Case "A"
'                            lColor = RGB(0, 0, 0)
'                        Case Else
'                            lColor = RGB(255, 255, 255)
'                    End Select
'                    mysrs.MarkerBackgroundColor = lColor
'                    mysrs.Format.Line.Visible = msoFalse
'                    mysrs.Format.Line.Visible = msoTrue
'                    mysrs.Format.Line.ForeColor.RGB = lColor
                Next
                Set mypts = ws.ChartObjects(1).SeriesCollection(SeriesCollection.Count).Points(1).Apply 'This fails cause it needs an Object
                mypts(mypts.Count).ApplyDataLabels

                    With mypts(mypts.Count).DataLabel
                        .ShowSeriesName = False
                        .ShowCategoryName = False
                        .ShowValue = False 'I need this tonot show Values, but my own Values.
                        ' optional parameters
                        .Position = xlLabelPositionAbove
                        .Font.Name = "Helvetica"
                        .Font.Size = 10
                        .Font.Bold = False
                    End With
            Next
        End With

1 Ответ

0 голосов
/ 28 августа 2018

Использовать свойство ChartType объекта Series ...

.SeriesCollection(.SeriesCollection.Count).ChartType = xlXYScatter
...