Как и Макс, я обнаружил, что многие команды в Excel, которые работают с различными объектами (фигурами, диаграммами, рисунками, рабочими листами, рабочими книгами и т. Д.), Занимают больше времени, чем раньше, и VBA не ожидает их завершения.прежде чем пытаться выполнить следующую команду.Отсюда ошибка, когда он пытается что-то сделать с картинкой, которая еще не вставлена.
Признаком этой проблемы является то, что код выполняется без ошибок при переходе в VB Editor с помощью клавиши F8, ноне работает на полной скорости при работе с клавишей F5.
Как и Макс, я придумал небольшую петлю, чтобы следить за этим:
With .chart
Do Until .Pictures.Count = 1
DoEvents
.Paste
Loop
End With
Альтернативой является размещениеФактически вставьте в отдельную функцию, которую вы бы вызвали из этой части кода, и передайте вставляемую картинку и диаграмму, которая ее получает.Барьер между различными элементами в стеке вызовов, похоже, побуждает VBA завершить то, что он делает, прежде чем перейти к следующему шагу.
Я должен отметить, что мне приходилось делать это во многих частях моего коммерческого ExcelНадстройка VBA, которая активно работает с диаграммами, и я вставил код, который был добавлен непосредственно из этой надстройки.