Позвольте мне начать с того, что я не эксперт в OLE-связанных графиках.Кто-то может объяснить это намного лучше, чем я.Итак, отказ от ответственности сделан ... oSh.Type = msoLinkedOLEObject не правильно идентифицирует все связанные графики.Связанный график может быть, например, oSh.Type = msoChart.Я обнаружил, что лучший способ идентифицировать связанную диаграмму - это проверить наличие свойства Shape.LinkedFormat.AutoUpdate ... свойство AutoUpdate существует только для связанных диаграмм ... и не существует длясвязанные графики.Ссылка на него для несвязанной диаграммы приведет к ошибке во время выполнения.Однако, если мы собираемся использовать его существование, то проверьте, существует ли свойство в VBA (довольно неуклюжий процесс).Например:
Private Function IsLinked(myShape As Shape)
Dim AutoUpdate As Variant
On Error GoTo Err_Handler
IsLinked = False
AutoUpdate = myShape.LinkFormat.AutoUpdate
IsLinked = True
Err_Handler:
End Function
Таким образом, вы можете проверить, связан ли oSh, используя вышеуказанную функцию.Следующая проблема заключается в том, что BreakLink не (всегда) работает.Лучший способ - просто установить автоматическое обновление на ручное обновление ... например:
oSh.LinkFormat.AutoUpdate = ppUpdateOptionManual
В качестве альтернативы, вы всегда можете скопировать диаграммы без ссылок.