如何使“编辑链接” VBA代码运行得更快?

时间:2019-06-06 12:36:11

标签: excel vba powerpoint

我写了一些代码来查找到“文件A”的外部链接,并将其替换为“文件B”的链接。代码在PowerPoint中,“文件A”和“文件B”都是excel文件。 PowerPoint文件中有大约25个链接到excel的“对象”(这些对象主要是粘贴到PowerPoint中作为链接对象的excel单元格)。

该代码有效,但是需要7-8分钟才能运行。知道为什么需要那么长时间或如何使其更快吗?看来它所做的只是查找和替换文本,所以我很困惑为什么要花这么长时间。

代码的相关部分:

Dim newPath As String
Dim templateHome As String
Dim oshp As Shape
Dim osld As Slide
Dim vizFile As Workbook
Dim vizFname As String
Dim replacethis As String
Dim replacewith As String


'3. Update links:
'(Replace links to template file link with links to new copy of the file)


replacethis = templateHome & vizFname
replacewith = newPath & "\" & vizFname
On Error Resume Next
For Each osld In ActivePresentation.Slides
   For Each oshp In osld.Shapes


     oshp.LinkFormat.SourceFullName = Replace(oshp.LinkFormat.SourceFullName, replacethis, replacewith)
     oshp.LinkFormat.Update


    Next oshp
Next osld

1 个答案:

答案 0 :(得分:3)

这段代码很干净,因此您可能无法做很多优化工作,但是我要提醒您,它所做的不仅仅是“查找和替换文本” :)每次调用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