Frage zu meinem Makro

Ich habe die Änderungen vorgenommen, aber es macht immer noch dasselbe, und wenn ich es hier neu starte, oder es buggt!

 

 


sans_titre.png

Ah, ich glaube, es liegt daran, dass du den Backslash am Ende deines Weges nicht hast!!

 

Um dies zu überprüfen, fügen Sie Folgendes hinzu:

 

Wenn right(FileNamePathPDF,1) = "\" dann

DateinamePfadPDF = DateinamePfadPDF & "\"

Ende, wenn

 

Sie müssen es vor Ihre Zeile setzen:

Wenn Dir$(DateinamePfadPDF) = "" dann

1 „Gefällt mir“

Nein, Lucas, es ist dasselbe, ich habe es nicht so gemacht, wie du gesagt hast, ich habe es so gemacht.

 

DateinamePfadPDF = "C:\ANGER\pdf\" & DateinamePDF & "\"

 

Aber das ändert nichts.

 

Auf der anderen Seite, wie funktioniert es?

nErrors = SWmoddoc.SaveAs(DateinamePDF)    DateinamePDF=045/1-2014-A

 

 

Was sollten wir in Klammern haben?

Ich finde es nicht und ich verstehe nicht wirklich, was es im Internet gibt.

Wie oben erwähnt, muss Ihre PDFFileName-Variable die Dateiendung enthalten!

Also für you.pdf

Und vielleicht auch der Weg?

 

Probieren Sie beides aus.

Ich habe derzeit nicht die Möglichkeit, es zu testen.

1 „Gefällt mir“

Ich habe die 2 ausprobiert, da ich wusste, dass die Variable "FileNamePDF" ursprünglich die Erweiterung hatte, aber sie bleibt gleich, sie speichert sie in dem Ordner, in dem die Datei aktiv ist.

Sie haben also nicht versucht, den Zielpfad (wo Sie ihn speichern möchten) in FileNamePDF aufzunehmen?

Denn ein "Speichern unter" ohne den Pfad speichert es in dem Ordner, in dem sich das Originalteil befindet!

 

 

1 „Gefällt mir“

Es wird sein:

nErrors = SWmoddoc.SaveAs(DateinamePfadPDF & DateinamePDF)

 

Indem Sie sicherstellen, dass zwischen den 2 ein umgekehrter Schrägstrich steht (in der ersten oder der zweiten Variablen spielt es keine Rolle).

1 „Gefällt mir“

Und bei meiner Nachricht von 15:47 ging es um die Erstellung des Ordners, nicht um das Speichern des PDFs:

 

Lucas P

Juli 15, 2014 - 03:47 PM

Ah, ich glaube, es liegt daran, dass du den Backslash am Ende deines Weges nicht hast!!

 

Um dies zu überprüfen, fügen Sie Folgendes hinzu:

 

Wenn right(FileNamePathPDF,1) = "\" dann

DateinamePfadPDF = DateinamePfadPDF & "\"

Ende, wenn

 

Sie müssen es vor Ihre Zeile setzen:

Wenn Dir$(DateinamePfadPDF) = "" dann

1 „Gefällt mir“

re re re re re

 

Ich habe Angst, darauf zu bestehen, aber Fgirards Rat ist, sowohl für die Verwendung von [Scripting.FileSystemObject] als auch für [SaveAs] zu befolgen.

 

Nun, jetzt können wir auf der Verwendung von Dir beharren, aber wir müssen das Biest zu einem guten Durcheinander machen, die Unterscheidung zwischen Dateien und Ordnern machen!!

 

Ihr Code-Snippet:

'Testen, ob der Ordner mit dem Jahr vorhanden ist, wenn nicht, erstellen Sie ihn
    Wenn Dir(PfadDateiNamePDF) = "" dann
        MkDir PfadDateinamePDF
    Ende, wenn

 

Ich übersetze: Wenn es keine Datei an der Adresse [PathFileNamePDF] gibt, rufen Sie MkDir auf, um den letzten Unterordner zu erstellen, der in der Adresse [PathFileNamePDF] enthalten ist.

 

Ihr Test ist nicht der richtige, so dass MkDir abstürzen kann, wenn der letzte Unterordner der Adresse vorhanden ist (Laufzeitfehler 75).

MkDir stürzt auch ab, wenn der vorletzte Unterordner der Adresse nicht existiert (Laufzeitfehler 76).

MkDir stürzt auch ab, wenn das Laufwerk, z. B. [R:], nicht verfügbar ist, wenn ...

Auf der anderen Seite ist MkDir unempfindlich gegenüber der Frage, ob am Ende der Adresse ein [\] vorhanden ist oder nicht.

 

ein leicht modifiziertes Programm aus der VBA-Hilfe (wählen Sie Dir und drücken Sie F1, um die Hilfe zu erhalten):

 

' Zeigt im Ausführungsfenster (Strg+G) die Namen der Ordner an, die unter [C:\A\] vorhanden sind.
' und wenn einer dieser Ordnernamen "2014" ist, dann stoppt das Programm
Dimmen von MyFile, MyPath, MyName
MyPath = "C:\A\"    ' Definiert den Pfad.
MyName = Dir(MyPath, vbDirectory)    ' Ruft den ersten Eintrag ab.
Do while MyName <> ""    ' Startet die Schleife.
    ' Ignoriert den aktuellen Ordner und die
    ' mit dem aktuellen Ordner.
    Wenn MyName <> "." und MyName <> ".. " Dann
        ' Verwendet einen Vergleich auf Bitebene, um zu überprüfen, ob MyName ein Ordner ist.
        if (GetAttr(MyPath & MyName) und vbDirectory) = vbDirectory dann
            Debug.Print MyName    ' Zeigt den Eintrag nur an, wenn er einen Ordner darstellt.
            Wenn MyName = "2014" dann stoppt 'der '2014' Ordner existiert!!
        Ende, wenn
    Ende, wenn
    MyName = Dir    ' Ruft den folgenden Eintrag ab.
Schleife

 

 

Dieser Codeausschnitt ist vorteilhafterweise ersetzbar durch (siehe Fgirard-Bemerkungen):

 

 Dim oFSO                As Scripting.FileSystemObject
 Dim oFld                  As Ordner

 Set oFSO = Neues Scripting.FileSystemObject

Wenn oFSO.FolderExists(" "c:\A\2014") = true, dann
    Aufhören

Ende, wenn

 

ODER noch einfacher und nicht überraschend

 

So fs
Set fs = CreateObject("Scripting.FileSystemObject")

Wenn fs. FolderExists("c:\A\2014") dann
    Aufhören
Ende, wenn

 

 

Bleibt abzuwarten für eure [SaveAs]

 

Ich habe das gerade versucht:

 

  Dim swApp       als SldWorks.SldWorks
  Dim swModel   As SldWorks.ModelDoc2

  Sun Rep           als Boolean

  Legen Sie swApp = Application.SldWorks fest
  Festlegen von swModel = swApp.ActiveDoc
  Dir = swModel.SaveAs("C:\A\toto.pdf") ' "     C:\A" sollte vorhanden sein, wenn "toto.pdf" vorhanden ist, wird es automatisch überschrieben

 

Und es funktioniert sehr gut. >> Beginnen Sie beim Debuggen mit Text in Klammern (hier "C:\A\toto.pdf"). Wenn es funktioniert, gibt Dir True zurück. Dann können Sie versuchen, Ihren Text durch eine Variable zu ersetzen (hier eine Variable, die als String deklariert ist).

 

 

A+

 

 

 

2 „Gefällt mir“

Hallo an Sie,

 

Also habe ich ein bisschen ausprobiert, was du mir gegeben hast Caronmaxime

 

So fs
Set fs = CreateObject("Scripting.FileSystemObject")

Wenn fs. FolderExists("c:\A\2014") dann
    Aufhören
Ende, wenn

 

Auf der anderen Seite habe ich meine Registrierungsphase verlassen, indem ich die vollständige Adresse eingegeben habe.

 

UND ES FUNKTIONIERT !!

 

Auf der anderen Seite und ja, es gibt nur ein Problem, wenn der Ordner existiert, haben Sie "STOP" markiert, ich muss was markieren, damit der Ordner nicht neu erstellt wird und dass er normal speichert.

 

Ich füge meinen Code an.

 

So fs

Set fs = CreateObject("Scripting.FileSystemObject")

Wenn fs. FolderExists(FileNamePathPDF) dann

    Aufhören

Ende, wenn

       MkDir (DateinamePfadPDF)

 

'------------------------------------------------------------------

"Prüfen Sie, ob die Datei bereits vorhanden ist, oder bestätigen Sie

"Dann wird die Aufnahme

 

    If Dir$(FileNamePathPDF) = FileNamePDF Then 'Die Datei existiert bereits

        Wenn MsgBox("Die Datei: " & DateinamePDF & vbNewLine & " bereits existiert. Wollen Sie ihn ersetzen?", _

         vbOKCancel + vbExclamation) = vbOK Dann

            nErrors = SWmoddoc.SaveAs(DateinamePfadPDF + DateinamePDF)

        Oder

            if MsgBox("PDF-Datei wurde nicht erstellt.", vbInformation) = vbOK dann exit sub '-------Nachricht und BEENDEN-------

        Ende, wenn

    Oder

        Wenn msgBox("Datei: " & DateinamePDF & vbNewLine & " wird erstellt", vbOKCancel + vbInformation) = vbOK, dann

            nErrors = SWmoddoc.SaveAs(DateinamePfadPDF + DateinamePDF)

        Oder

            if MsgBox("PDF-Datei wurde nicht erstellt.", vbInformation) = vbOK dann exit sub '-------Nachricht und BEENDEN-------

        Ende, wenn

    Ende, wenn

    

Ende Sub

Wir müssen die entgegengesetzte Bedingung testen:

Wenn fs. FolderExists(FileNamePathPDF) dann

 

Oder

       MkDir (DateinamePfadPDF)

Ende, wenn

2 „Gefällt mir“

Perfekt Lucas, es funktioniert!!

VIELEN DANK AN ALLE FÜR IHRE HILFE!!!