У меня есть .Сценарий VBS, похожий на этот, который проходит по папке и сохраняет заголовки слайдов PowerPoints

Dim InputFolder : InputFolder = "C:\........\"
Dim OutputFolder : OutputFolder = "C:\........\"
Dim ObjFolder : Set ObjFolder = CreateObject("Scripting.fileSystemObject").GetFolder(InputFolder)

Dim Extension : Extension = "PNG"
Dim PixelWidth : PixelWidth = 1024
Dim PixelHeight : PixelHeight = 768

Dim ObjPPT : Set ObjPPT = CreateObject("PowerPoint.Application")
Dim ObjSPresentation
Dim ObjSlide

For Each File In ObjFolder.Files
    if (File.Type = "Microsoft PowerPoint Presentation") Then

        ' Open PPT
        ObjPPT.Presentations.Open File
        Set ObjPresentation = ObjPPT.ActivePresentation

        ' Select title slide
        Set ObjSlide = ObjPresentation.Slides(1)

        ' Export slide
        ObjSlide.Export OutputFolder & ObjPresentation.Name & "." & Extension, _
            Extension, _
            PixelWidth, _
            PixelHeight

        ' Close PPT
        ObjPresentation.Close
    End If
Next

ObjPPT.Quit

Он работает до тех пор, пока не достигнет определенного файла, когда выдает ошибку:

C:\........\ppt.vbs(17,4) (null): Unspecified error

И когда я открываю презентацию, я получаю это диалоговое окно

PowerPoint found a problem with content in C:\broken.pptx.
PowerPoint can attempt to repair the presentation.

If you trust the source of this presentation, click Repair.

Ремонт работает нормально. Мой вопрос заключается в том, могу ли я каждый раз проверять скрипт на это и автоматически восстанавливать при необходимости. Необходимость перезапуска скрипта всякий раз, когда обнаружен поврежденный файл PPT, в некоторой степени противоречит цели автоматизации.

1 ответ1

0

Вы можете попробовать использовать on error .

Так что вместо:

ObjPPT.Presentations.Open File

попробуйте что-то вроде:

On Error Resume Next
ObjPPT.Presentations.Open File
If Err.Number <> 0 then
  'handle error opening file or emit log to handle manually etc
Endif
On Error Goto 0

Вы также можете использовать метки и goto чтобы перейти к концу файлового цикла, или вы можете просто поместить остальную часть цикла в условное значение Err.Number = 0 .

Подробности смотрите в документации MS или смотрите, например, https://stackoverflow.com/questions/24317840/understanding-on-error-in-vbscript

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .