Я построил код в excel, чтобы взять данные из сводной таблицы и вставить его в диаграмму, сводная диаграмма, непосредственно связанная с таблицей, не даст мне возможности управления, которую я ищу. Причина, по которой я столкнулся с проблемой создания такого "сложного" кода, заключается в том, что для каждой комбинации информации о заводе и тесте мне нужно, чтобы она была отдельной записью в диаграмме.
таким образом, основной смысл этого кода состоит в том, чтобы пройти через каждое растение и проверить комбинацию информации (вложенную для команды) затем вставьте данные в диаграмму. Мой пользователь не будет изменять расположение столбцов для x и y, поэтому смещения работают нормально.
моя проблема в том, что если комбинация завод / тестовая информация не существует, она все равно попадает на график. Когда я пытаюсь использовать команду goto и отправить ее на следующий PI2, используя errorhandle, она не работает (возможно, из-за вложенных команд if). Я искал вокруг, пытаясь найти команду, которая могла бы отправить мой код в определенную строку код (i.e сразу после команд графика), но не повезло...
кто-нибудь знает, как перейти к определенной строке в случае ошибки?
Я добавил набор команд для возобновления на следующем 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