Office 2016/365 VBA无法从旧脚本更新PPT链接

Office 2016/365 VBA无法从旧脚本更新PPT链接,vba,office365,powerpoint,Vba,Office365,Powerpoint,我需要更改大型PPT演示文稿中的链接列表。我有工作代码,做得很好。最近我升级到Office 2016,现在脚本无法正常工作 我简单地将我的新旧路径字符串放在二维数组中,并在其中循环修改PPT中的链接 这里面有一些调试代码,还有我试图修复的注释行,请忽略 For j = 0 To UBound(MyArray) oldString = MyArray(j, 0) newString = MyArray(j, 1) If Len(oldString) > 1 Then

我需要更改大型PPT演示文稿中的链接列表。我有工作代码,做得很好。最近我升级到Office 2016,现在脚本无法正常工作

我简单地将我的新旧路径字符串放在二维数组中,并在其中循环修改PPT中的链接

这里面有一些调试代码,还有我试图修复的注释行,请忽略

For j = 0 To UBound(MyArray)

  oldString = MyArray(j, 0)
  newString = MyArray(j, 1)

  If Len(oldString) > 1 Then
    For Each pptSlide In ActivePresentation.Slides
      For Each pptShape In pptSlide.Shapes
        If (pptShape.Type = msoLinkedOLEObject) Or (pptShape.Type = msoChart) Then
'           With pptShape.LinkFormat

                If InStr(1, (pptShape.LinkFormat.SourceFullName), (oldString), 1) Then

                ' debug points
                q = pptShape.Id
                r = pptShape.Name
                s = pptSlide.SlideIndex
                t = pptSlide.SlideNumber

                ' The actual source link
                x = pptShape.LinkFormat.SourceFullName
                ' substitute source link with new string
                y = Replace(x, oldString, newString)
                ' Further adjust new link so any spaces in tab names have %20
                y = Replace(y, "%20", " ")
                'y = Replace(y, " ", "%20")
                'y = Replace(y, "file:///", "")


                ' ignore errors when can't see new link
                On Error Resume Next

                pptShape.LinkFormat.SourceFullName = y
                DoEvents
                ' debug assignment
                w = pptShape.LinkFormat.SourceFullName

                   Debug.Print "old string " & oldString
                   Debug.Print "replacement string " & newString
                   Debug.Print "org link x " & x
                   Debug.Print "new link y " & y
                   Debug.Print "result   w " & w
                   Debug.Print "---"
                   Debug.Print ""


                End If

'            End With
        End If
      DoEvents
      Next pptShape
    DoEvents
    Next pptSlide

  End If

Next
PPT 2016已将链接更改为类似HTML的格式,前面有一个文件:///并将所有空格更改为“%20”

下面是几个运行我的脚本的示例。现在,如果我有一个不同的路径和一个不同的文件名,它需要在每个过程中使用两个不同的“匹配”字符串(一个带%20,一个不带%20)的代码过程。如果文件名相同,那么它将在代码的一个过程中完成,但它会在每个链接中打开文件4次。因为我有数百个链接,非常耗时

同样在office 2015中,只要我打开了目标,就没有重新打开。现在,如果我打开了目标,我会得到一个错误,说它不能打开两个同名文件

示例1对于不同路径和不同文件名,所有苍蝇都关闭

将数组馈送到要更改链接的代码:

调试器中报告的原始链接:

第一次,打开文件两次(假设目标和源),导致链接缺少%20,但没有更改路径或文件名:

更改数组的第一个元素(源路径)并再次运行代码。这一次,匹配字符串是相同的,但不带%20。再次,它在此过程中打开了2个文件,这次它更改了路径和文件名:

第二个示例,文件名相同,仅路径更改。两个文件都没有打开。只有一个链接需要更新

原始链接:

pass 1将文件打开4次,但不会像示例1中那样运行2次脚本,结果是:

没什么大不了的,但可能值得注意:如果我保存文件,链接不会更改,但是如果我保存,关闭并重新打开,PPT会将文件:///和%20添加回原始链接

文件名的HTML化似乎影响了它的工作方式。它会导致每个链接打开4次文件。显然每个源和目标两次

最糟糕的是,在第一个示例中,更改了文件名和路径,我必须运行scrip两次,将源/匹配字符串从带“%20”更改为不带“%20”才能成功

有人知道怎么解决这个问题吗


2017年1月26日:为了更好的格式和清晰度,编辑了一些文件。

你说的“每个链接打开文件4次”是什么意思?它是宏吗?文件ppt文件?我的意思是,对于文件中的单个链接,当我运行代码时,只要它到达更改sourcefullname的行,我就会看到它打开excel文件4次。我有一个正在运行的带宽监视器,我可以在那里看到它,每次下载(源文件和目标文件都在网络共享上),在excel中打开一个不相关的文件,我会看到4个弹出对话框,上面写着“下载文件…”随着要更改的链接数的增加,文件打开的次数也相应增加。编辑:每一组打开的文件都与最内层循环的一次迭代相关联,并在执行该行时发生注意:我的测试文件中只有一个链接。真正的文件有数百个。所以基本上你是在寻找一种方法来改变离线模式下的超链接。如果你是离线模式,我不知道。我在线,网络完全打开,所以我不明白为什么它会离线。也许我误解了你的意思。我只想用脚本更改链接(路径或文件名),我不想让它为PPT中的每个链接下载4次文件。这就是它现在所做的。Office 2016似乎扼杀了它。你所说的“每个链接打开文件4次”是什么意思?它是宏吗?文件ppt文件?我的意思是,对于文件中的单个链接,当我运行代码时,只要它到达更改sourcefullname的行,我就会看到它打开excel文件4次。我有一个正在运行的带宽监视器,我可以在那里看到它,每次下载(源文件和目标文件都在网络共享上),在excel中打开一个不相关的文件,我会看到4个弹出对话框,上面写着“下载文件…”随着要更改的链接数的增加,文件打开的次数也相应增加。编辑:每一组打开的文件都与最内层循环的一次迭代相关联,并在执行该行时发生注意:我的测试文件中只有一个链接。真正的文件有数百个。所以基本上你是在寻找一种方法来改变离线模式下的超链接。如果你是离线模式,我不知道。我在线,网络完全打开,所以我不明白为什么它会离线。也许我误解了你的意思。我只想用脚本更改链接(路径或文件名),我不想让它为PPT中的每个链接下载4次文件。这就是它现在所做的。Office 2016似乎扼杀了它。
MyArray(0, 0) = "file:///\\aFolder\bFolder\Reports\daily%20report%20generator.xlsm!Site%20Completions!R2C2:R17C17"
MyArray(0, 1) = "file:///\\aFolder\bFolder\Reports\Rpt-Other\daily%20report%20generator2.xlsm!Site%20Completions!R2C2:R17C17"
file:///\\aFolder\bFolder\Reports\daily%20report%20generator.xlsm!Site%20Completions!R2C2:R17C17
\\aFolder\bFolder\Reports\daily report generator.xlsm!Site Completions!R2C2:R17C17
\\aFolder\bFolder\Reports\Rpt-Other\daily report generator2.xlsm!Site Completions!R2C2:R17C17
file:///\\aFolder\bFolder\Reports\daily%20report%20generator.xlsm!Site%20Completions!R2C2:R17C17
\\aFolder\bFolder\Reports\Rpt-Other\daily report generator.xlsm!Site Completions!R2C2:R17C17