2016-07-09 3 views
0

Просьба не отмечать дубликаты, поскольку я правильно проверял другие связанные решения, связанные с ошибкой 91, но ни один из них, похоже, не нашел решение проблемы, с которой я столкнулся.Ошибка VBA 91 - Объект или с блоком Переменная не установлена ​​

Я пытаюсь преобразовать файлы coreldraw, вложенные в различные папки (около 500 файлов), используя следующий код VBA, но при этом он либо сбой приложения, либо объект Error 91 'Object или With Block Variable not set'. Тот же код абсолютно отлично работает при использовании с другим демо-набором файлов, который я создал для тестирования.

Один случай, который я мог бы предположить, - это файл, показывающий некоторое диалоговое окно при обработке сценария. Если да, то как я должен предотвратить эти диалоговые окна. Application.DisplayAlerts = False не работает в coreldraw.

Но в любом случае это только предположение. Может кто-то поможет мне найти проблему. Heres код

Sub NewFolder() 
Dim FileSystem As Object 
Dim HostFolder As String 
HostFolder = "My folder Path" 
Set FileSystem = CreateObject("Scripting.FileSystemObject") 
DoFolder FileSystem.GetFolder(HostFolder) 
End Sub 

Sub DoFolder(folder) 
Dim SubFolder 
For Each SubFolder In folder.SubFolders 
    DoFolder SubFolder 
Next 
Dim File 
For Each File In folder.Files 
If InStr(File.Name, ".cdr") Then 
Application.OpenDocument (File) 
End If 
Dim filepath As String 
filepath = ActiveDocument.FullFileName 
Dim doc1 As Document 
Dim SaveOptions As StructSaveAsOptions 
Set SaveOptions = CreateStructSaveAsOptions 
Set doc1 = ActiveDocument 

With SaveOptions 
    .EmbedVBAProject = True 
    .Filter = cdrCDR 
    .IncludeCMXData = False 
    .Range = cdrAllPages 
    .EmbedICCProfile = True 
    .Version = cdrVersion17 
End With 

doc1.SaveAs filepath, SaveOptions 
doc1.Close 
    ' Operate on each file 
Next 
End Sub 
+0

Это обычно помогает при отладке сообщения об ошибках, чтобы узнать WHA строка выводит ошибку. – Jeeped

ответ

0

Я бы сказал, что вы должны проверить, если действительный файл Corel Draw был найден

Я не знаю CorelDraw VBA, но я предполагаю, что вы могли бы получить следующий код как хорошее начало:

Sub DoFolder(folder) 
    Dim SubFolder 
    For Each SubFolder In folder.SubFolders 
     DoFolder SubFolder 
    Next 
    Dim file 
    Dim doc1 As Document 
    Dim filepath As String 
    Dim SaveOptions As StructSaveAsOptions 
    For Each file In folder.Files 
     If InStr(file.Name, ".cdr") Then 
      Set doc1 = GetDocument(file) '<--| try and get a valid CorelDraw document with the given file: see 'GetDocument()' function at the bottom 
      If Not doc1 Is Nothing Then '<--| if you succeed then go on with your code 
       filepath = ActiveDocument.FullFileName 
       Set SaveOptions = CreateStructSaveAsOptions 
       With SaveOptions 
        .EmbedVBAProject = True 
        .Filter = cdrCDR 
        .IncludeCMXData = False 
        .Range = cdrAllPages 
        .EmbedICCProfile = True 
        .Version = cdrVersion17 
       End With 
       doc1.SaveAs filepath, SaveOptions 
       doc1.Close 
      End If 
     End If 
     ' Operate on each file 
    Next 
End Sub 

Function GetDocument(file As Variant) As Document 
    On Error Resume Next 
    Set GetDocument = OpenDocument(file) 
End Function 

как примечание стороны я собрал все Dim заявления вне петли, чтобы не иметь их запускать несколько раз бесцельно

+0

@ManishJain, вы попробовали это? – user3598756