Frage zu meinem Makro

Wenn es immer noch nicht funktioniert, fügen Sie Spione hinzu, wie hier gezeigt:

http://www.tomshardware.fr/forum/id-1348092/tutoriel-excel-macro-vba-debogage.html

 

Und was sind die Werte der Variablen:

NameDateiPDF 

PfadNameDateiPDF

 

 

Wo endet Ihr Makro?

1 „Gefällt mir“

re

 

Um ein Makro zu testen, das im Formeleditor >, klicken Sie auf "Ansicht", auf "Lokales Variablenfenster" > siehe Anhang


editeur_de_macro_fenetre_variables_locales.png
2 „Gefällt mir“

Unsere Beiträge überschneiden sich, tut mir leid.

 

Es ist seltsam, dass "SaveAs" mit dem vollständigen Dateinamen (Pfad+Name+Erweiterung) nicht richtig funktioniert.

Gleiches gilt für den Fehler mit dem Ordner, der bereits existiert.

 

Versuchen Sie es mit dem Befehl "SaveAs" für ModelDocExtension. Dies ist diejenige, die ich in meinen Makros verwende.

So können Sie eine Meldung machen:

   Dim SWmodext as As SldWorks.ModelDocExtension

   Dim swExportPDFData     As SldWorks.ExportPdfData

Fehler              so lange   dimmen
Schwache Warnungen,            solange sie nicht angezeigt werden   

und wie man beeinflusst:

   Legen Sie SWmodext = SWmoddoc.Extension fest

dann:

   nErrors = SWmodext.SaveAs(DateinamePfadPDF, 0, 0, swExportPDFData, Fehler, Warnungen)

 

 

 

Für die Ordnerverwaltung verwende ich das FileSystemObject:

Dim oFSO                As Scripting.FileSystemObject   
Dim oFld                  As Ordner   

 

   Set oFSO = Neues Scripting.FileSystemObject

 

   Wenn oFSO.FolderExists(FileNamePathPDF) = false, dann
        Legen Sie oFld = oFSO.CreateFolder(DateinamePfadPDF) fest
    Ende, wenn

2 „Gefällt mir“

 Vielen Dank caronmaxime, sehr nützlich dieses Fenster!

 

Mit Ihrem Fenster haben meine Variablen also den Wert, den ich ihnen geben möchte, aber es funktioniert nicht so, wie ich es möchte.

 

Er wird die Datei 2014 für mich erstellen, auf der anderen Seite, wenn die Datei bereits existiert, hört sie bei der Mkdir-Zeile auf (1. Punkt, den ich nicht verstehe)

 

und er erstellt die PDF-Datei für mich, aber auf der anderen Seite im selben Ordner wie die aktive Datei, wenn er sie in den 2014-Ordner legen sollte (2. Punkt, den ich nicht verstehe)

 

HILFE!!

1 „Gefällt mir“

Würde der Fehler nicht davon herrühren, dass Sie einen Ordner testen und einen weiteren Ordner erstellen?

 

Wenn Dir$(DateinamePfadPDF) = "" dann
MkDir DateinamePDF

Ende, wenn

 

PathFileNamePDF oder sollte hier 2 Mal verwendet werden, oder? Einmal für den Dir$-Test und einmal für den MkDir?

3 „Gefällt mir“

re re

 

Mathieu, meiner Meinung nach sollte dein   [MkDir FileNamePDF ]  durch    [MkDir FileNamePathPDF] ersetzt werden.

 

In Ihrem Makro-Editor können Sie auf das Schlüsselwort MkDir doppelklicken, um es auszuwählen, und F1 drücken. Die Hilfe wird es Ihnen ermöglichen zu verstehen.

re re re

 

Machen Sie eine Bestandsaufnahme unter Berücksichtigung der hervorragenden Empfehlungen von Fgirard und werfen Sie vielleicht einen Blick auf die Frage "Mein PDF-DXF-Makro, was soll ich sagen? ", die ich veröffentlicht habe.

 

Ansonsten gehe ich so vor (siehe Anhang), um ein Makro zu debuggen, wenn es Ordner oder Dateien erstellt


capture_decran_sw_et_editeur_sw_et_explorer_windows.png

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!!!