2013-02-27 2 views
4

Я пытаюсь, чтобы точки в диаграмме меняли цвет, если они находятся в определенных значениях параметров (т. Е.> 1 зеленый, < 1 красный, все остальное - синее). Я не могу определить, как получить VBA, чтобы дать мне значение любой заданной точки.Определение значения точки в Excel VBA

В ответе this thread ответ (очень полезно другим способом) указывает, что точки (num) .value вернут значение в точке. Тем не менее, я получаю сообщение об ошибке, делая это, и нигде больше в Интернете или в справке VBA я не могу найти способ, который соответствует этому. Кто-нибудь еще имел успех с этим?

Вот фрагмент кода дает мне неприятности:

For Count = 1 To 7 
    If Worksheets("Sheet1").ChartObjects("ChartName").Chart.SeriesCollection(1).Points(Count).Value > 1 Then 
    '... do stuff 

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

+0

Какое сообщение об ошибке вы получаете? Не могли бы вы разместить более полную версию своего кода? Кроме того, я извинился; это на самом деле правила переполнения стека, если у вас есть новый вопрос, вы должны опубликовать новый вопрос, а не спрашивать в существующем, так хорошо для вас. – LittleBobbyTables

+0

В нем говорится: «Ошибка времени выполнения 438: объект не поддерживает это свойство или метод». Кажется довольно простым ... я в основном задавался вопросом, существует ли такое же свойство, просто с другим именем. Кодекса было не так много, так как я понял, что это была определенная часть, которая давала мне ошибку. Я еще не успел реализовать «сделать материал», но он даже не открыл бы, например, «msgbox», подтверждающий, что он прошел линию. И, кстати, в этом конкретном случае значение точки действительно было больше 1! – Joe

ответ

9
Sub Tester() 

Dim cht As Chart, s As Series, p As Point 
Dim vals, x As Integer 

    Set cht = ActiveSheet.ChartObjects(1).Chart 
    Set s = cht.SeriesCollection(1) 

    vals = s.Values 

    For x = LBound(vals) To UBound(vals) 
     If vals(x) > 10 Then 
     With s.Points(x) 
      .MarkerBackgroundColor = RGB(255, 0, 0) 
      .MarkerForegroundColor = RGB(255, 0, 0) 
     End With 
     End If 
    Next x 

End Sub 
+0

Это потрясающе, спасибо вам большое! Я адаптировал его к тому, что мне нужно (читать: сложный и загрязненный); теперь я не могу понять, почему он делает то, что мне нужно, на всех, кроме одного из моих карт. Я разместил свой код по адресу http://pastebin.com/yTqEnw01, если вы хотите взглянуть на него. В принципе, это правильная цветовая кодировка каждой диаграммы, но график «2» всегда зеленый; цвета никогда не меняются. – Joe

+0

Трудно сказать, не видя всей книги: не было никаких очевидных проблем с вашим кодом. –

+0

Я думаю, что это закончилось тем, что Excel не распознал название диаграммы. То есть, я назвал графики «1», «2», «3» и т. Д., Чтобы я мог прокручивать их, но VBA действовал так, как будто я говорил о графике (1), а не о графике (" 1"). Я добавил «выбор случая», чтобы выплюнуть фактическое имя диаграммы, и это устранило проблему; также сделал код более понятным для людей более послушным, чем я. Спасибо за вашу помощь; Я бы поднял ставку, но мой рейтинг репутации еще недостаточно высок! – Joe

Смежные вопросы