Я построил код в Excel для извлечения данных из сводной таблицы и вставки их в диаграмму. Сводная диаграмма, напрямую связанная с таблицей, не даст мне требуемой маневренности. Причина, по которой я столкнулся с проблемой создания такого «запутанного» кода, заключается в том, что для каждой комбинации Plant и Test Info мне нужно, чтобы она была отдельной записью на диаграмме.
Таким образом, основной смысл этого кода состоит в том, чтобы пройти через каждую комбинацию объекта и информации о тесте (вложенную для команд), а затем вставить данные в диаграмму. Мой пользователь не будет изменять расположение столбцов для x и y, поэтому смещения работают нормально.
Моя проблема в том, что если комбинация информация о заводе / тесте не существует, она все равно записывается на диаграмму. Когда я пытаюсь использовать команду goto и отправлять ее на следующий PI2 с помощью ручки ошибки, она не работает (возможно, из-за вложенных команд if). Я искал, пытаясь найти команду, которая могла бы отправить мой код на определенную строку в коде (то есть сразу после команд графика), но безуспешно ...
Кто-нибудь знает способ пропустить на определенную строку в случае ошибки?
Я добавил набор команд для возобновления на следующем PI2, где я говорю об ошибке goto errhandler, затем из errhandler перехожу к следующей итерации, но когда я запускаю код и получаю ошибку, он не проходит по этому маршруту, это вместо этого остановка на линии пересечения.
Sub CreatePivotChart()
Dim PF1 As PivotField
Dim PI1 As PivotItem
Dim PI2 As PivotItem
Dim PF2 As PivotField
Dim chartcount As Integer
Dim pt As PivotTable
Set pt = Worksheets("Pivot Table").PivotTables("PivotTable")
'set up pivot field locations 1 - plant and unit , 2 - test conditions
Set PF1 = Worksheets("PivotTable").PivotTables("PivotTable").PivotFields("Plant")
Set PF2 = Worksheets("Pivot Table").PivotTables("PivotTable").PivotFields("Test Info")
'clear the chart from previous run
chartcount = 0
Sheets("Pivot Table Graph").ChartObjects("Chart 1").Chart.ChartArea.ClearContents
On Error GoTo ErrHandler
'find each visible unit
For Each PI1 In PF1.PivotItems
If PI1.Visible = True Then
Unit = PI1.Name
For Each PI2 In PF2.PivotItems
'for each unit and test condition find the information at their intersection
If PI2.Visible = True Then
TC = PI2.Name
'find the information that corresponds to each unit/test condition combination
Intersect(pt.PivotFields("Plant").PivotItems(Unit).DataRange.EntireRow, pt.PivotFields("Test Info").PivotItems(TC).DataRange).Select
Selection.Offset(-1, 0).Select
ForXRanges = "='Pivot Table'!" & Selection.Address
Selection.Offset(0, 1).Select
ForYRanges = "='Pivot Table'!" & Selection.Address
ForRangesName = Unit & "_" & TC
'for each combination create a new series on the chart
chartcount = chartcount + 1
Sheets("Pivot Table Graph").ChartObjects("Chart 1").Activate
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(chartcount).Name = ForRangesName
ActiveChart.SeriesCollection(chartcount).XValues = ForXRanges
ActiveChart.SeriesCollection(chartcount).Values = ForYRanges
End If
NextIteration:
Next PI2
End If
Next PI1
Exit Sub
ErrHandler:
Resume NextIteration:
End Sub