none
Word-Datei per VBA löschen schlägt fehl RRS feed

  • Frage

  • Hallo,

    ich versuche per VBA eine Datei mit der Erweiterung DOC in das aktuelle Format DOCX zu konvertieren und die "alte" dann automatisch zu löschen. Die Konvertierung funktioniert, das Löschen jedoch nicht. Ich erhalte immer einen Laufzeitfehler 70, der auf einen Zugriffsverletzung hinweist. Die DOC-Datei wird jedoch geschlossen! Hat jemand eine Idee?

    Gruß

    Michael

    Mein Code sieht wie folgt aus:

    Dim strDocname As String
        strDocname = ActiveDocument.Name
        strDocname = Left(strDocname, Len(strDocname) - 4)
       
        If Right(ActiveDocument.Name, 3) = "doc" Then
            ActiveDocument.SaveAs2 FileName:=CurDir & "\" & strDocname & ".docx", FileFormat _
                :=wdFormatXMLDocument, LockComments:=False, Password:="", _
                AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
                EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
                :=False, SaveAsAOCELetter:=False, CompatibilityMode:=14
                
            Documents(CurDir & "\" & strDocname & ".docx").Close SaveChanges:=wdDoNotSaveChanges
            'Documents.Open CurDir & "\" & strDocname & ".docx"
            Kill CurDir & "\" & strDocname & ".doc"
            
        End If


    Sonntag, 21. April 2013 08:30

Antworten

  • Hallo Andreas,

    DoEvents hat mein Problem gelöst. Deine Sicherheitshinweise nehme ich sehr ernst.

    Danke

    Michael

    Mittwoch, 24. April 2013 13:45

Alle Antworten

  • Das Makro ist zu schnell, Dein Windows ist zu langsam, das hält die Datei gesperrt. Probier mal ein DoEvents vor dem Löschen, könnte gehen.

    Mal was anderes, das Makro benutzt aber nur Du persönlich? Du hast nicht vor es zu Verteilen? Das könnte nämlich ziemlich in die Hose gehen.

    Wer sagt Dir das CurDir mit dem Pfad der Datei übereinstimmt?

    Wer sagt daß das Speichern nicht fehlschlägt und dann geht die Datei zu und alles ist futsch. Und zu allem Übel löscht Du das Original auch gleich noch.

    Ganz ehrlich: Lass den Unfug lieber.

    Eine sinnvolle Alternative ist die Datei selber von Hand als DOCX oder DOCM zu speichern und diesen Vorgang kann man überwachen. Nun kannst Du nach dem Speichern kucken ob beide Dateien DOC und DOC? im gleichen Verzeichnis existieren und dann eine Frage stellen ob die alte gelöscht werden soll. Falls ja, dann darfst Du Sie löschen.

    Andreas.

    Montag, 22. April 2013 17:25
  • Hallo,

    danke für den Hinweis. Es handelt sich um eine Anforderung einer Abteilung. Die Daten sind alle gesichert, so das ein eventueller Verlust einer Datei kein wirkliches Problem darstellt. Diese Abteilung will das so!

    Die Konvertierung geschieht automatisch dann, wenn eine .doc geöffnet wird. Damit sollte CurDir korrekt sein, da die Prozedur über outoopen gestartet wird. Das Löschen geschieht in der Testphase zuerst über eine Bestätigung, später nur dann, wenn die Konvertierung erfolgreich ist. Die Zuverlässigkeit dieses Tools muss sichergestellt sein. Hintergrund ist die Anforderung lediglich zu bearbeitende Dokumente zu konvertieren. Da Benutzer üblicherweise keine Bereinigung von Altdaten ausführen, erwarten die Entscheider kurzfristig eine Verdoppelung des Speicherplatzes. Das soll mit diesem Tool verhindert werden.

    Diese Anforderung halte ich für legitim, Deinen Hinweis allerdings auch.

    Das mit DoEvents werde ich ausprobieren.

    Gruß

    Michael

    Dienstag, 23. April 2013 10:09
  • Die Zuverlässigkeit dieses Tools muss sichergestellt sein.

    Wenn Du CurDir verwendest, dann ist das nicht im geringsten sicher. CurDir liefert den aktuellen Pfad eines Laufwerkes und da besteht unter Windows die Möglichkeit das jeder Task der gerade läuft diesen ändern kann. Nimm wenigstens "Document.Path".

    Und das automatisch beim Öffnen zu machen, heiliger Bimbam... naja, ich vermute mal das Ihr gut geordnete Sicherungskopien habt, wenn nicht dann mach eine, denn die wirst Du brauchen.

    Andreas.

    Dienstag, 23. April 2013 10:30
  • Hallo Andreas,

    DoEvents hat mein Problem gelöst. Deine Sicherheitshinweise nehme ich sehr ernst.

    Danke

    Michael

    Mittwoch, 24. April 2013 13:45