2016-07-09 9 views
0

Bitte markieren Sie das Duplikat nicht, da ich andere verwandte Lösungen speziell für Error 91 überprüft habe, aber keine davon scheint mir die Lösung für das Problem zu liefern.VBA Error 91 - Object oder With block Variable nicht gesetzt

Ich versuche, meine Coreldraw-Dateien verschachtelt in verschiedenen Ordnern (etwa 500 Dateien) mit dem folgenden VBA-Code, aber entweder Absturz der Anwendung oder zeigt die Error 91 'Object oder With Block Variable nicht gesetzt'. Derselbe Code funktioniert einwandfrei, wenn er mit dem anderen Demo-Set von Dateien verwendet wird, die ich zum Testen erstellt habe.

Ein Fall könnte ich vermuten, ist die Datei zeigt einige Dialog bei der Verarbeitung des Skripts. Wenn ja, wie soll ich diese Dialogfelder verhindern? Application.DisplayAlerts = False funktioniert nicht in Coreldraw.

Aber dieser Fall ist nur eine Annahme. Kann mir jemand helfen, das Problem zu finden? Heres der Code

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

laufen zu haben, es hilft in der Regel, wenn Fehlermeldungen Fehlersuche zu wissen, wha t Zeile wirft den Fehler. – Jeeped

Antwort

0

würde ich sagen Sie, wenn eine gültige CorelDraw-Datei gefunden wurde, als ein

Ich weiß nicht, CorelDraw VBA

überprüfen müssen, aber ich würde davon ausgehen, könnten Sie den folgenden Code erhalten guter Start:

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 

als Randnotiz sammelte ich alle Dim Anweisungen außerhalb Schleifen sie nicht mehrere Zeit unnütz

+0

@ManishJain, hast du das versucht? – user3598756

Verwandte Themen