Office 2016/365 VBA не удается обновить ссылки PPT из старого скрипта

У меня есть необходимость изменить списки ссылок в больших презентациях 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"

Вот пара примеров запуска моего скрипта. Теперь, если у меня другой путь и другое имя файла, потребуется 2 прохода кода с разными "совпадающими" строками (одна с% и одна без%20) в каждом проходе. Если имя файла совпадает, то это будет сделано за один проход кода, но он открывает файлы 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

1-й проход, открывает файлы дважды (предполагают цель и источник), в результате ссылка пропускает% 20, но путь или имя файла не изменяются:

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

Измените первый элемент массива (исходный путь) и запустите код 2 раза. На этот раз строка совпадения такая же, за исключением%20. Опять же, он открыл 2 файла за этот проход, на этот раз он изменил путь и имя файла:

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

2-й пример, имена файлов одинаковые, только изменения пути. Ни один файл не открыт. Есть только одна ссылка для обновления.

Оригинальная ссылка:

file:///\\aFolder\bFolder\Reports\daily%20report%20generator.xlsm!Site%20Completions!R2C2:R17C17

проход 1 открывает файл 4 раза, но не выполняет 2 запуска скрипта, как это было в примере 1, в результате:

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

Ничего страшного, но стоит отметить: если я сохраню файл, ссылки не изменятся, но если я сохраню, закрою заново, PPT добавит файл:/// и% 20 вернется к исходным ссылкам.

Похоже, HTMLizing имен файлов изменил способ его работы. И это приводит к тому, что файлы открываются 4 раза по ссылке. По-видимому, дважды на источник и цель.

Хуже всего то, что в первом примере, который изменяет как имя файла, так и путь, мне нужно дважды запустить скрипт, изменив строку "источник / совпадение" с "на" без "%20", чтобы добиться успеха.

Кто-нибудь знает, как это исправить?

26.01.17: отредактированы некоторые для лучшего форматирования и ясности.

0 ответов

Другие вопросы по тегам