очень знающие VBA люди,
У меня есть сводная диаграмма, и я написал подпункт для форматирования представления серии. Эта диаграмма содержит четыре серии и подключена к слайсеру.
Проблема в том, что форматы не работают для некоторых кнопок слайсера, потому что один из форматов серии исчезает. Формат этого ряда должен быть серой линией; точки данных есть, но цвет линии и заливки отсутствует.
Я уже отладил эту штуку и использовал часы, чтобы проверить, что происходит, но все в порядке и работает как надо. Когда я нажимаю клавишу F8 для макроса, после серии, которая не работает, я пытаюсь с помощью мыши принудительно изменить цвет на линии графика, и это работает.
Есть ли у вас какие-нибудь предложения, где мне искать проблему? То же происходит и с вашими сводными диаграммами?
Я написал такой код:
Dim srs_name As String
Dim srs As Integer
ActiveSheet.ChartObjects("Diagramm 7").Activate
'formatting Shipped Qty series
srs_name = "Shipped qty"
On Error Resume Next
If Not ActiveChart.SeriesCollection(srs_name) Is Nothing Then
ActiveChart.SeriesCollection(srs_name).ChartType = xlColumnStacked
ActiveChart.SeriesCollection(srs_name).Format.Fill.ForeColor.RGB = RGB(255, 192, 0)
ActiveChart.SeriesCollection(srs_name).Format.Line.ForeColor.RGB = RGB(255, 192, 0)
ActiveChart.SeriesCollection(srs_name).AxisGroup = 1
End If
'formatting Order series
srs_name = "Order"
On Error Resume Next
If Not ActiveChart.SeriesCollection(srs_name) Is Nothing Then
ActiveChart.SeriesCollection(srs_name).ChartType = xlColumnStacked
ActiveChart.SeriesCollection(srs_name).Format.Fill.ForeColor.RGB = RGB(91, 155, 213)
ActiveChart.SeriesCollection(srs_name).Format.Line.ForeColor.RGB = RGB(91, 155, 213)
ActiveChart.SeriesCollection(srs_name).AxisGroup = 1
End If
'formatting Sales series
srs_name = "Sales"
On Error Resume Next
If Not ActiveChart.SeriesCollection(srs_name) Is Nothing Then
ActiveChart.SeriesCollection(srs_name).ChartType = xlLine
ActiveChart.SeriesCollection(srs_name).Format.Fill.ForeColor.RGB = RGB(165, 165, 165)
ActiveChart.SeriesCollection(srs_name).Format.Line.ForeColor.RGB = RGB(165, 165, 165)
ActiveChart.SeriesCollection(srs_name).AxisGroup = 1
End If
'formatting Transport series
srs_name = "Transport"
On Error Resume Next
If Not ActiveChart.SeriesCollection(srs_name) Is Nothing Then
ActiveChart.SeriesCollection(srs_name).ChartType = xlColumnStacked
ActiveChart.SeriesCollection(srs_name).Format.Fill.ForeColor.RGB = RGB(237, 125, 49)
ActiveChart.SeriesCollection(srs_name).Format.Line.ForeColor.RGB = RGB(237, 125, 49)
ActiveChart.SeriesCollection(srs_name).AxisGroup = 1
Else
End If
'formatting a 5th series, if needed
srs = ActiveSheet.ChartObjects("Diagramm 7").Chart.SeriesCollection.Count
If srs > 4 Then
ActiveChart.SeriesCollection(5).ChartType = xlArea
ActiveChart.SeriesCollection(5).Format.Fill.ForeColor.RGB = RGB(222, 235, 247)
ActiveChart.SeriesCollection(5).Format.Line.ForeColor.RGB = RGB(222, 235, 247)
ActiveChart.SeriesCollection(5).AxisGroup = 1
End If
On Error Resume Next
, получите ли вы сообщение об ошибке? Если да, то что это за сообщение и в какой строке оно выводится? - person BigBen   schedule 18.09.2019On Error Resume Next
, является худшей практикой (он скрывает все сообщения об ошибках, но ошибки все равно возникают, и вы никогда не заметите, если что-то не так в вашем коде). Никогда не используйте его в одиночку. Для получения дополнительной информации вам может быть полезно прочитать Обработка ошибок VBA - полное руководство - person Pᴇʜ   schedule 18.09.2019