Как изменить цвета в текстовом поле для разных строк с VBA? - PullRequest
0 голосов
/ 28 октября 2019

Я строю лист диаграммы с легендой и несколькими сериями. Требуется, чтобы над диаграммой отображался текст, содержащий названия и цвета серии. Так что в основном как легенда, но с некоторыми рассчитанными значениями, которые являются дополнительнымиМне удалось поместить названия серий в одно текстовое поле, но я не могу покрасить их по отдельности.

У вас есть идеи, как я могу это сделать?

Это текстовое поле:

Dim ChartSheet1 As Chart

Set ChartSheet1 = Charts.Add(After:=Sheets(Sheets.Count))

with chartSheet1
 Dim myTextBox As TextBox
 Set myTextBox = .TextBoxes.Add(30, 60, 550, 100)

Вот как я помещаю названия серии в текстовое поле.

myTextBox.Text = myTextBox.Text & vbNewLine & .FullSeriesCollection(x).Name

Здесь яЯ устанавливаю цвета для серии:

    Dim color(1 To 10) As Long

    color(1) = RGB(95, 95, 95)
    color(2) = RGB(51, 51, 153)
    color(3) = RGB(150, 150, 150)
    color(4) = RGB(51, 102, 255)
    color(5) = RGB(192, 192, 192)
    color(6) = RGB(133, 163, 255)
    color(7) = RGB(213, 213, 213)
    color(8) = RGB(173, 194, 255)
    color(9) = RGB(234, 234, 234)
    color(10) = RGB(214, 224, 255)

     Select Case Int(countSeries / 2)

     Case 1 To 4

        For k = 1 To countSeries
            ''For l = 2 To countSeries - 1
           '' Debug.Print k

               .FullSeriesCollection(k).Format.Line.ForeColor.RGB = color(k + 1)
               ''Debug.Print .FullSeriesCollection(k).Format.Line.ForeColor.RGB
               ''myTextBox.Text = .FullSeriesCollection(k).Name & vbNewLine
              ' myTextBox.Font.color = color(k)
             If k + 1 < countSeries Then
               .FullSeriesCollection(k + 1).Format.Line.ForeColor.RGB = color(k + 2)

               'myTextBox.Font.color = color(k + 1)
             End If

        ''Next l
        Next k


        Case 5 To 20

         For k = 1 To countSeries
                ''For l = 1 To countSeries - 1
            'And l + 2 < 10 Then
                .FullSeriesCollection(k).Format.Line.ForeColor.RGB = color(k)
                 If k + 1 < 10 Then
                .FullSeriesCollection(k + 1).Format.Line.ForeColor.RGB = color(k + 1)
                End If

             ''Next l
             Next k

      Case Else    ' Other values.
          Debug.Print "Not between 1 and 20"

       End Select

Редактировать: у меня нет текстового поля UserForm, я использую простое текстовое поле из фигур: Каждый символ в TextBox различного цвета в VBA Excel

Могу ли я использовать текстовое поле UserForm для моего сценария? Поскольку я не хочу подсказку, просто простой текст в верхней части графика.

Я добавил код для создания текстового поля.

...