#excel #vba
#преуспеть #vba #excel
Вопрос:
У меня есть график диаграммы EXCEL, содержащий линии и точки. Я использую MouseUp/GetChartElement
, чтобы определить, какую серию пользователь щелкнул левой кнопкой мыши. Chart_MouseUp
Код основан на коде, который Джон Пелтье любезно разместил на своем веб-сайте :
Private Sub Chart_MouseUp(ByVal Button As Long, ByVal Shift As Long, ByVal X As Long, ByVal Y As Long)
Dim elementId As Long
Dim arg1 As Long
Dim arg2 As Long
Dim xlSer As Series
With ActiveChart
.GetChartElement X, Y, elementId, arg1, arg2
If elementId = xlSeries Then
If Button = xlPrimaryButton And Shift = 4 Then
Set xlSer = .SeriesCollection(arg1)
MsgBox "User clicked series " amp; xlSer.Name
End If
End If
End With
End Sub
Проблема в том, что серия, возвращаемая кодом, смещена на 1: например, если я нажимаю на серию # 6, то код говорит, что я нажал на серию # 7. На диаграмме, похоже, нет никаких скрытых рядов (я проверил, прокручивая Chart.SeriesCollection
), поэтому я довольно сбит с толку. Был бы признателен за любые комментарии или мысли … заранее спасибо
Комментарии:
1. Что
Debug.Print ActiveChart.SeriesCollection.count
возвращает в немедленном окне, по сравнению с тем, что, по вашему мнению, является последней серией?2. выводится 8 — это количество рядов, показанных на графике
3. И если вы нажмете на последнюю, что возвращает функция?
4.
Runtime error '1004' - parameter not valid
. В режиме отладки ошибка вызвана тем, чтоarg1
равно 9, что на 1 больше, чемSeriesCollection.Count
5. Это происходит на всех ваших диаграммах, которые вы пробовали? Если да, вы просто адаптируете функцию для возврата
Set xlSer = .SeriesCollection(arg1 - 1)
… Даже если это не имеет никакого значения, поскольку SeriesCollections начинается с 1. Но это будет способ / обходной путь использовать его по мере необходимости … 🙂
Ответ №1:
Как указал FaneDuru, одна из серий была скрыта ( SeriesCollection.Format.Line.Visible = False
), так что она была включена в общее количество серий (предположительно, где-то поддерживается Excel), но исключена из SeriesCollection.Count
. Удаление скрытой серии решило проблему