Pytanie dotyczące mojego makra

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