Pytanie dotyczące mojego makra

Jeśli to nadal nie zadziała, dodaj szpiegów, jak pokazano poniżej:

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

 

A jakie są wartości zmiennych:

NazwaPlikPDF 

PlikNazwa_ścieżkiPDF

 

 

Gdzie kończy się Twoje makro?

1 polubienie

Ponownie

 

Aby przetestować > makra w edytorze równań, kliknij "Widok", "Okno zmiennej lokalnej" > zobacz załącznik


editeur_de_macro_fenetre_variables_locales.png
2 polubienia

Nasze posty się przecinają, przepraszamy.

 

Dziwne jest, że "Zapisz jako" nie działa poprawnie z pełną nazwą pliku (ścieżka+nazwa+rozszerzenie).

To samo dotyczy błędu z folderem, który już istnieje.

 

Spróbuj użyć polecenia "Zapisz jako" dla ModelDocExtension. To jest ten, którego używam w moich makrach.

Oto jak to zgłosić:

   Dim SWmodext jako SldWorks.ModelDocExtension

   Dim swExportPDFData     As SldWorks.ExportPdfData

Błędy              przyciemnienia tak długo   
Ostrzeżenia o przyciemnieniu            tak długo   

i jak to wpłynąć:

   Ustaw SWmodext = SWmoddoc.Extension

wtedy:

   nErrors = SWmodext.SaveAs(FileNamePathPDF, 0, 0, swExportPDFData, Błędy, Ostrzeżenia)

 

 

 

Do zarządzania folderami używam FileSystemObject:

Dim oFSO                As Scripting.FileSystemObject   
Dim oFld                  As Folder (Folder przyćmij jako folder)   

 

   Set oFSO = New Scripting.FileSystemObject

 

   Jeśli oFSO.FolderExists(FileNamePathPDF) = False, to
        Set oFld = oFSO.CreateFolder(FileNamePathPDF)
    Zakończ jeżeli:

2 polubienia

 Dziękuję caronmaxime, bardzo przydatne to okno!

 

Tak więc w twoim oknie moje zmienne mają wartość, którą chcę im nadać, ale nie działa to tak, jak chcę.

 

utworzy dla mnie plik 2014, z drugiej strony, jeśli plik już istnieje, zatrzymuje się na linii Mkdir (1. punkt, którego nie rozumiem)

 

i tworzy dla mnie plik pdf, ale z drugiej strony w tym samym folderze co aktywny plik, kiedy powinien go umieścić w folderze 2014 (2. punkt, którego nie rozumiem)

 

POMOC!!

1 polubienie

Czy błąd nie wynikałby z faktu, że testujesz folder i tworzysz inny?

 

Jeśli Dir$(FileNamePathPDF) = "" Następnie
MkDir NazwaPlikuPDF

Zakończ się, jeśli

 

PathFileNamePDF czy powinien być tutaj użyty 2 razy, prawda? Raz dla testu Dir$ i raz dla MkDir?

3 polubienia

re re re

 

Mathieu, moim zdaniem twój   [ MkDir  FileNamePDF]  powinien zostać zastąpiony przez    [ MkDir FileNamePathPDF]

 

W edytorze makr możesz kliknąć dwukrotnie słowo kluczowe MkDir, aby je zaznaczyć, a następnie nacisnąć F1. Pomoc pozwoli ci zrozumieć.

Z drugiej strony, w Kościele

 

dokonać podsumowania, biorąc pod uwagę doskonałe rekomendacje Fgirarda, a może spojrzeć na pytanie "moje makro PDF DXF, co powiedzieć? ", który opublikowałem.

 

W przeciwnym razie postępuję w ten sposób (patrz załącznik) debugowanie makra, gdy tworzy ono foldery lub pliki


capture_decran_sw_et_editeur_sw_et_explorer_windows.png

Wprowadziłem zmiany, ale nadal działa tak samo, a kiedy uruchamiam go ponownie tutaj lub działa błędy!

 

 


sans_titre.png

Ach, myślę, że to dlatego, że nie masz ukośnika odwrotnego na końcu swojej ścieżki!!

 

Aby to sprawdzić, dodaj to:

 

Jeśli right(FileNamePathPDF,1) = "\" to

FileNamePathPDF = FileNamePathPDF & "\"

Zakończ się, jeśli

 

Musisz umieścić go przed swoją linią:

Jeśli Dir$(FileNamePathPDF) = "" Następnie

1 polubienie

Nie, lucas, to jest to samo, nie zrobiłem tego tak, jak powiedziałeś, zrobiłem to w ten sposób.

 

FileNamePathPDF = "C:\GNIEW\pdf\" & FileNamePDF & "\"

 

Ale to niczego nie zmienia.

 

Z drugiej strony, jak to działa?

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

 

 

Co powinniśmy mieć w nawiasach?

Nie znajduję go i tak naprawdę nie rozumiem, co jest w internecie.

Jak wspomniano powyżej, zmienna PDFFileName musi zawierać rozszerzenie pliku!

Tak więc dla you.pdf

A może ścieżka też?

 

Wypróbuj jedno i drugie.

Obecnie nie mam możliwości przetestowania tego.

1 polubienie

Próbowałem 2, wiedząc, że zmienna "FileNamePDF" ma pierwotnie rozszerzenie, ale pozostaje takie samo, zapisuje je w folderze, w którym plik jest aktywny.

Więc nie próbowałeś dołączyć ścieżki docelowej (miejsca, w którym chcesz ją zapisać) w FileNamePDF?

Ponieważ opcja "zapisz jako" bez ścieżki zapisuje ją w folderze, w którym znajduje się oryginalna część!

 

 

1 polubienie

Będzie to:

nErrors = SWmoddoc.SaveAs(FileNamePathPDF & FileNamePDF)

 

Upewniając się, że między 2 znajduje się odwrotny ukośnik (w pierwszej zmiennej lub drugiej, nie ma to znaczenia).

1 polubienie

A w mojej wiadomości z 15:47 chodziło o utworzenie folderu, a nie o zapisanie PDF-a:

 

Łukasz P

lipiec 15, 2014 - 03:47 PM

Ach, myślę, że to dlatego, że nie masz ukośnika odwrotnego na końcu swojej ścieżki!!

 

Aby to sprawdzić, dodaj to:

 

Jeśli right(FileNamePathPDF,1) = "\" to

FileNamePathPDF = FileNamePathPDF & "\"

Zakończ się, jeśli

 

Musisz umieścić go przed swoją linią:

Jeśli Dir$(FileNamePathPDF) = "" Następnie

1 polubienie

re re re re re

 

Obawiam się, że będę nalegał, ale rada Fgirarda jest taka, aby postępować zgodnie z [Scripting.FileSystemObject], jak i [Zapisz jako].

 

Cóż, teraz możemy upierać się przy używaniu Dir, ale musimy zrobić z bestii niezły bałagan, dokonać rozróżnienia między plikami a folderami !!

 

Twój fragment kodu:

'Sprawdź, czy folder z rokiem istnieje, jeśli nie, utwórz go
    Jeśli Dir(PathFileNamePDF) = "" Następnie
        MkDir NazwaPlikuŚcieżkiPDF, ŚcieżkaPlikuPDF
    Zakończ jeżeli:

 

Tłumaczę: Jeśli pod adresem [PathFileNamePDF] nie ma pliku , wywołaj MkDir, aby utworzyć ostatni podfolder zawarty w adresie [PathFileNamePDF].

 

Twój test nie jest właściwy, więc MkDir może ulec awarii, jeśli istnieje ostatni podfolder adresu (błąd wykonania 75).

MkDir ulega również awarii, jeśli przedostatni podfolder adresu nie istnieje (błąd wykonania 76).

MkDir ulega awarii również wtedy, gdy dysk, na przykład [R:] nie jest dostępny, jeśli ...

Z drugiej strony, MkDir jest niewrażliwy na to, czy na końcu adresu znajduje się [\].

 

nieznacznie zmodyfikowany program z pomocy VBA (wybierz Dir i naciśnij F1, aby uzyskać pomoc):

 

' Wyświetla w oknie wykonywania (Ctrl+G) nazwy folderów znajdujących się w [C:\A\]
' i jeśli jedna z tych nazw folderów to "2014", program zatrzymuje się
Dim MyFile, MyPath, MyName
MyPath = "C:\A\"    ' Definiuje ścieżkę.
MyName = Dir(MyPath, vbDirectory)    ' Pobiera pierwszy wpis.
Do While MyName <> ""    ' Uruchamia pętlę.
    ' Ignoruje bieżący folder i
    ' zawierający bieżący folder.
    Jeśli mojaNazwa<> "." i MojaNazwa<> ".. " Następnie
        ' Używa porównania poziomu bitów w celu sprawdzenia, czy kolumna MojaNazwajest folderem.
        Jeśli (GetAttr(MojaŚcieżka & MojaNazwa) I vbDirectory) = vbDirectory Then
            Debug.Print MyName    ' Wyświetla wpis tylko wtedy, gdy reprezentuje folder.
            Jeśli MojaNazwa="2014", Zatrzymaj folder "2014", który istnieje!!
        Zakończ jeżeli:
    Zakończ jeżeli:
    MyName = Dir    ' Pobiera następujący wpis.
Pętla

 

 

ten fragment kodu jest korzystnie zastępowany przez (patrz uwagi Fgirarda):

 

 Dim oFSO                As Scripting.FileSystemObject
 Dim oFld                  As Folder (Folder przyćmij jako folder)

 Set oFSO = New Scripting.FileSystemObject

Jeśli oFSO.FolderExists(" "c:\A\2014") = True Then
    Zatrzymać

Zakończ jeżeli:

 

Albo jeszcze prostsze i niezaskakujące

 

Słońce fs
Ustaw fs = CreateObject("Scripting.FileSystemObject")

Jeśli fs. FolderExists("c:\A\2014") następnie
    Zatrzymać
Zakończ jeżeli:

 

 

Dopiero się okaże dla twojego [Zapisz]

 

Właśnie spróbowałem tego:

 

  Dim swApp       jako SldWorks.SldWorks
  Dim swModel   As SldWorks.ModelDoc2

  Sun Rep           jako wartość logiczna

  Ustaw swApp = Application.SldWorks
  Ustaw swModel = swApp.ActiveDoc
  Dir = swModel.SaveAs("C:\A\toto.pdf") ' "     C:\A" powinien istnieć, jeśli istnieje "toto.pdf", zostanie automatycznie nadpisany

 

I działa to bardzo dobrze. >> Podczas debugowania zacznij od tekstu w nawiasach (tutaj "C:\A\toto.pdf"). Jeśli to zadziała, Dir zwraca wartość True. Następnie możesz spróbować zastąpić swój tekst zmienną (w tym przypadku zmienną zadeklarowaną jako ciąg znaków).

 

 

Klasa A+

 

 

 

2 polubienia

Witam Państwa,

 

Więc spróbowałem trochę tego, co mi dałeś Caronmaxime

 

Słońce fs
Ustaw fs = CreateObject("Scripting.FileSystemObject")

Jeśli fs. FolderExists("c:\A\2014") następnie
    Zatrzymać
Zakończ jeżeli:

 

Z drugiej strony wyszedłem z fazy rejestracji, podając pełny adres.

 

I DZIAŁA !!

 

z drugiej strony i tak jest tylko problem, jeśli folder istnieje, masz zaznaczony "STOP" muszę zaznaczyć co, aby nie odtworzył folderu i aby zapisywał się normalnie.

 

Załączam swój kod.

 

Słońce fs

Ustaw fs = CreateObject("Scripting.FileSystemObject")

Jeśli fs. FolderExists(FileNamePathPDF) Następnie

    Zatrzymać

Zakończ jeżeli:

       MkDir (NazwaPlikuPDF)

 

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

"Sprawdź, czy plik już istnieje, lub potwierdź

"Następnie nagrywanie

 

    Jeśli Dir$(FileNamePathPDF) = FileNamePDF, to 'Plik już istnieje

        Jeśli MsgBox("Plik: " & NazwaPlikuPDF & vbNewLine & " już istnieje. Czy chcesz go zastąpić?", _

         vbOKCancel + vbWykrzyknik) = vbOK Następnie

            nErrors = SWmoddoc.SaveAs(ŚcieżkaNazwyPlikuPDF + NazwaPlikuPDF)

        Inaczej

            Jeśli MsgBox("Plik PDF nie został utworzony.", vbInformation) = vbOK Następnie wyjdź z sub '-------Message i EXIT-------

        Zakończ jeżeli:

    Inaczej

        Jeśli MsgBox("Plik: " & NazwaPlikuPDF & vbNewLine & " zostanie utworzony", vbOKCancel + vbInformation) = vbOK to

            nErrors = SWmoddoc.SaveAs(ŚcieżkaNazwyPlikuPDF + NazwaPlikuPDF)

        Inaczej

            Jeśli MsgBox("Plik PDF nie został utworzony.", vbInformation) = vbOK Następnie wyjdź z sub '-------Message i EXIT-------

        Zakończ jeżeli:

    Zakończ jeżeli:

    

Koniec subwoofera

Musimy przetestować odwrotny warunek:

Jeśli fs. FolderExists(FileNamePathPDF) Następnie

 

Inaczej

       MkDir (NazwaPlikuPDF)

Zakończ jeżeli:

2 polubienia

Idealny Lucas, to działa!!

DZIĘKUJĘ WSZYSTKIM ZA POMOC!!!