Этот код довольно чистый, поэтому, вероятно, вы мало что можете сделать, чтобы оптимизировать его, но я хотел бы предостеречь вас, что он делает больше, чем просто "поиск и замена текста" :) Каждый вызов UpdateLink
извлекает данные из какой-то внешний источник. Это не просто замена строки!
Во-первых: On Error Resume Next
проглатывает много ошибок (т. Е. Любую фигуру, которая не является связанным объектом, поэтому большинство из них), это потенциально увеличивает ваше время выполнения, и может быть лучше, если вы кодируете эти ошибки, а не просто едите их с Resume Next
.
' On Error Resume Next ' ## Comment or remove this line :)
For Each osld In ActivePresentation.Slides
For Each oshp In osld.Shapes
If oshp.Type = msoLinkedOLEObject Then
oshp.LinkFormat.SourceFullName = Replace(oshp.LinkFormat.SourceFullName, replacethis, replacewith)
oshp.LinkFormat.Update
End If
Next
Next
Кроме того, вы звоните на oshp.LinkFormat.Update
повторно. Возможно, лучше всего заменить весь текст в цикле, но вместо обновления отдельных ссылок обновите их сразу за пределами цикла, используя метод Presentation.UpdateLinks
:
' On Error Resume Next ' ## Comment or remove this line :)
For Each osld In ActivePresentation.Slides
For Each oshp In osld.Shapes
If oshp.Type = msoLinkedOLEObject Then
oshp.LinkFormat.SourceFullName = Replace(oshp.LinkFormat.SourceFullName, replacethis, replacewith)
' ## REMOVE oshp.LinkFormat.Update
End If
Next
Next
' Now, update the entire presentation:
ActivePresentation.UpdateLinks