Microsoft Excel:

  Таблицы и VBA. Справочник.
  Вопросы и Ответы. Советы. Примеры.
Меню Заметки | Выделение сектора круговой диаграммы, после наведения курсора мышки


Rambler's Top100


Counter CO.KZ

XL2007

Если Вам необходимо, чтобы после наведения курсора мышки на нужный сектор круговой диаграммы (расположенной на отдельном листе), он бы выделялся, за счёт того, что все остальные сектора, просто стали бы полупрозрачными, то в этой версии, сие можно осуществить так :

Модуль листа диаграммы
Private oldArg2&

Private Sub Chart_MouseMove(ByVal Button As Long, ByVal Shift As Long, ByVal X As Long, ByVal Y As Long)
    On Error Resume Next 'XL2007

    Dim ElementID&, Arg1&, Arg2&, iPoint As Point    
    Me.GetChartElement X, Y, ElementID, Arg1, Arg2

    If oldArg2 = Arg2 Then Exit Sub

    If ElementID = xlSeries Then
       With Me.SeriesCollection(1) '(Arg1)
            .Format.Fill.Solid
            For Each iPoint In .Points
                iPoint.Format.Fill.Transparency = 0.75
            Next
            .Points(Arg2).Format.Fill.Transparency = 0
       End With
       oldArg2 = Arg2
    End If
End Sub
Совет : Если использовать переменную oldArg2, то можно обойтись без цикла (см. пример), однако, в этом случае, предварительная установка прозрачности просто обязательна (см.далее)

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

Если проигнорировать этот шаг, то необходимая прозрачность будет автоматически установлена при самом первом наведении курсора мышки на сектор(точку), что будет визуально заметно, особенно, при большом количестве секторов(точек)
Private Sub SetTransparency_xl2007()    
    Dim iPoint As Point
    Me.SeriesCollection(1).Format.Fill.Solid
    For Each iPoint In Me.SeriesCollection(1).Points
        iPoint.Format.Fill.Transparency = 0.75
    Next
End Sub

Примечание : Прозрачность в 75% не является обязательным условием и может быть изменена.




XL97-2003

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



Модуль листа диаграммы
Private oldArg2&

Private Sub Chart_MouseMove(ByVal Button As Long, ByVal Shift As Long, ByVal X As Long, ByVal Y As Long)
    Dim ElementID&, Arg1&, Arg2&
    Me.GetChartElement X, Y, ElementID, Arg1, Arg2
    
    If oldArg2 = Arg2 Then Exit Sub

    If ElementID = xlSeries Then
       With Me.SeriesCollection(1) '(Arg1)
            .Fill.Patterned msoPattern25Percent
            .Points(Arg2).Interior.ColorIndex = xlAutomatic
       End With
       oldArg2 = Arg2
    End If
End Sub
В этих версиях, необходимо "подготовить" диаграмму к работе, т.е. предварительно изменить "прозрачность" всех точек. Для этого, достаточно выполнить макрос SetTransparency_xl97
Private Sub SetTransparency_xl97()
    Dim iPoint As Point
    For Each iPoint In Me.SeriesCollection(1).Points
        iPoint.Interior.ColorIndex = xlAutomatic
        iPoint.Fill.Patterned msoPattern25Percent
    Next
End Sub


Комментарий : Не забудьте перед закрытием книги, содержащей такой лист диаграммы, деактивировать этот лист, причём это касается всех версий Excel.



Пример(ы) можно скачать здесь



Вопросы, связанные с этой темой
  • FAQ316 : Как создать событие для диаграммы, расположенной в рабочем листе ?
  • FAQ622 : Как определить над какой из точек диаграммы находится курсор мышки, причём без клика ?




  • Автор : Климов Павел Юрьевич
    © 2004-2016 Климов П.Ю. Все права защищены. WebDesign & Error's Klimoff