Первая проблема, которую я поднимаю, не связана с вопросом, но, несомненно, ускорит ваш код. В следующих строках:
Do Until plants.EOF 'Start of loop
Set excelapp = CreateObject("excel.application", "")
Set targetworkbook = excelapp.Workbooks.Open("H:\Plant SQE DB\Plant SQE DB - Template.xlsx")
.
Вы создаете объект Excel и открываете шаблон в каждом цикле. Зачем? В этом нет необходимости, он тратит ресурсы и увеличивает время выполнения.
Сделайте это вместо:
Set excelapp = CreateObject("excel.application", "")
Set targetworkbook = excelapp.Workbooks.Open("H:\Plant SQE DB\Plant SQE DB - Template.xlsx")
Do Until plants.EOF 'Start of loop
Если вам нужно сохранить шаблон для каждого графика, вы можете сделать это в конце так:
targetworkbook.SaveAs newFileName
Теперь рассмотрим проблемы с ActiveChart
. Измените эти строки:
wksheet2.Shapes.AddChart2(297, xlBarStacked).Select
wksheet2.ChartObjects("Chart 1").Activate
ActiveChart.FullSeriesCollection(3).Select
Кому:
Dim cht as Object
Set cht = wksheet2.Shapes.AddChart2(297, xlBarStacked)
With cht.FullSeriesCollection(3)
...
И следуйте примеру для всех строк ниже. Каждый раз, когда вы видите ActiveChart
, перемещайте метод внутри With Statement
и работайте непосредственно с объектом (исключите все операторы select)