Office 2016/365 VBA无法更新旧脚本

时间:2017-01-25 21:12:30

标签: vba office365 powerpoint-vba

我需要更改大型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)的代码通过2次。如果文件名相同,那么它将在代码的一次传递中执行,但它会为每个链接打开文件4次。因为我有数百个非常耗时的链接。

同样在2015年的办公室,只要我打开目标,就不会重新开启。现在,如果我打开目标,我会收到错误消息,说它无法打开同名的2个文件。

带有差异路径和差异文件名的

示例1 ,所有苍蝇都已关闭。

将代码转换为包含要更改的链接的代码:

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

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

\\aFolder\bFolder\Reports\daily report generator.xlsm!Site Completions!R2C2:R17C17

更改数组的第一个元素(源路径)并第二次运行代码。这次匹配字符串是相同的,除了w / o%20。同样,它在这个传递中打开了2个文件,这次它改变了路径和文件名:

\\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

传递1打开一个文件4次,但不像在示例1中那样运行2次脚本,结果是:

\\aFolder\bFolder\Reports\Rpt-Other\daily report generator.xlsm!Site Completions!R2C2:R17C17

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

似乎文件名的HTML化已经改变了它的工作方式。它导致文件每个链接打开4次。每个来源和目标显然是两次。

在第一个更改文件名和路径的示例中,最糟糕的是,我必须运行两次脚本,将源/匹配字符串从中更改为不使用“%20”以使其成功。

任何人都知道如何解决这个问题?

1/26/17:为了更好的格式和清晰度而编辑了一些。

0 个答案:

没有答案