Измените цвет и форму пузырьковой диаграммы в Excel на основе значения в другом столбце

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

Теперь мне нужно изменить цвет (и форму, но это на потом) в зависимости от состояния данных, которые отображаются в строке Z со значениями от 1 (красный) до 3 (зеленый).

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

Option Explicit
Sub ColortheFingpoints()
    Dim cht As Chart
    Dim srs As Series
    Dim pt As Point
    Dim p As Long
    Dim valRange As Range, cl As Range
    Dim myColor As Long

Set cht = ActiveSheet.ChartObjects(1).Chart
Set srs = cht.SeriesCollection(1)
Set valRange = Range("Z8:Z10")

    For p = 1 To srs.Points.Count
    Set pt = srs.Points(p)
    Set cl = valRange(p)

    With pt.Format.Fill
        .Visible = msoTrue
        Select Case LCase(cl)
            Case "1"
                myColor = RGB(255, 0, 0)
            Case "2"
                myColor = RGB(255, 140, 0)
            Case "3"
                myColor = RGB(0, 128, 0)
        End Select

        .ForeColor.RGB = myColor

    End With
Next

End Sub

редактировать 1:

Проблема, похоже, в том, что он запускается только один раз и поэтому смотрит только на Cell Z8, а не на Z9 или следующие


person chris    schedule 14.11.2017    source источник
comment
это работает для меня. Попробуйте добавить Debug.Print cl.Address & & cl после Set cl= и проверьте непосредственное окно.   -  person MarcinSzaleniec    schedule 14.11.2017
comment
Это отлично работает для меня. Все ваши числа 1, 2 или 3? Если нет, то цвет не изменится   -  person Jiminy Cricket    schedule 14.11.2017
comment
Да, я могу увидеть изменение, если я изменю число в первой ячейке, но не имеет значения, что я введу в следующие ячейки, оно всегда меняет только первое.   -  person chris    schedule 14.11.2017
comment
@MarcinSzaleniec Вывод просто показывает $Z$8 2 $Z$8 2 $Z$8 2 $Z$8 2   -  person chris    schedule 14.11.2017


Ответы (1)


Крис, попробуй изменить

Set cl = valRange(p)

to

Set cl = valRange.Range("A" & p)

Я не знаю, почему ваш код работает, но этот должен быть более удобочитаемым. Скажи мне, если это работает.

person MarcinSzaleniec    schedule 14.11.2017
comment
по-прежнему выдает ту же ошибку, правильно считывает значение Z8, но значение Z9. Можно ли отрицать следующую часть намерением? - person chris; 14.11.2017
comment
отступ для нас, смертных. Однако вы должны ввести Next p для ясности. В комментарии выше вы сказали, что всегда читается Z8, а не Z9. Может быть, попробуйте проверить свою таблицу, нет ли скрытых строк после Z8 или что-то в этом роде. Как я уже сказал, ваш макрос в порядке на моем компьютере. - person MarcinSzaleniec; 14.11.2017
comment
Никаких скрытых строк или чего-то еще, но если я заставлю код читать Z9, он перезапишет цвет точки из строки 8? что определенно не то, что я хочу. Спасибо за ваше время! - person chris; 14.11.2017