Pytanie dotyczące mojego makra

Witam

 

Utworzyłem makro na podstawie tego, co znalazłem, musi przekonwertować mój MEP do formatu pdf i zapisać go w folderze roku, w którym został utworzony, jeśli folder nie istnieje utwórz.

 

Oto ona:

 

Dim swApp As Object

 

Przyciemnij część jako obiekt

Dim FileNamePDF jako ciąg

 

Sub main()

Dim swApp jako SldWorks.SldWorks

Przyciemnij SWmoddoc jako SldWorks.ModelDoc2

Słońce NumerPlan Jako Ciąg

Przyciemnij plik ścieżki jako ciąg

Dim FileName As Ciąg

Dim NumberLeaf As Ciąg

Dim FileNamePDF jako ciąg

Dim PathFileNamePDF jako ciąg

Dim NazwaFolderPDF jako ciąg

Dim nErrors             tak długo, jak długo

Dim nWarnings tak długo,           jak długo

Ustaw swApp = Application.SldWorks

Ustaw SWmoddoc = swApp.ActiveDoc

 

'Pobieranie ścieżki i nazwy pliku

Przykład: \\MERCURE\Sharing\xMethods\Public\DAO\Solidworks\2 - Drawing\2014\046-1-2014-A.SLDDRW

PathName = SWmoddoc.GetPathName

FilePath = Left(PathName, InStrRev(PathName, "\")) '\\MERCURY\Sharing\xMethods\Public\DAO\Solidworks\2 - Rysunek\2014\

NazwaPliku = Right(NazwaŚcieżki, Len(NazwaŚcieżki) - InStrRev(NazwaŚcieżki, "\")) '046-1-2014-A.SLDDRW

FileNamePDF = Right(FileName, 13) '2014-A.SLDDRW

FileNamePDF = Lewo(NazwaPlikuPDF, 4) '2014

FileNamePathPDF = "\\MERCURY\Sharing\xMethods\Public\DAO\PDF Plans\" & FolderNamePDF '\\MERCURY\Sharing\xMethods\Public\DAO\PDF Plans\2014\

 

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

'Pobieranie właściwości niestandardowych z pliku planu

 

Jeśli SWmoddoc.GetType = swDocDRAWING Następnie sprawdź, czy jesteśmy na pliku planu

    FileNamePDF = Replace(Nazwa Pliku, "SLDDRW", "pdf")

Zakończ jeżeli:

 

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

'Sprawdź, czy folder z rokiem istnieje, jeśli nie, utwórz go

 

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

        MkDir "nazwa_plikuPDF"

       Zakończ jeżeli:

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

"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(FileNamePathPDF)

        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(FileNamePathPDF)

        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

 

 

Nie wiem jak go przetestować i chciałbym wiedzieć przed uruchomieniem, czy nie zrobiłem czegoś głupiego, bo bawi się folderami sieci mojej firmy.

 

Z góry dziękuję.

Witam

 

Aby przetestować makro, najlepiej umieścić punkt przerwania na początku, a następnie nacisnąć F8, aby przejść wiersz po wierszu.

Interesujące może być również umieszczenie szpiegów na ważnych zmiennych.

 

 

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

1 polubienie

Instrukcja debug.print pozwala na wyświetlenie zawartości zmiennej w oknie wykonywania (które wyświetla się za pomocą CTRL G, chyba).

 

Kiedy testuję moje makra, zmieniam ścieżki plików na ścieżki lokalne, co pozwala mi sprawdzić bez korzystania z sieci.

2 polubienia

Zmieniłem ścieżkę do testu.

 

Więc tworzy dla mnie folder, który nie istnieje, z drugiej strony nie tworzy pliku pdf, czy wiesz, czy może się zawiesić, ponieważ makro się nie zawiesza.

Musisz sprawdzić swoje warunki.

 

Zatrzymaj się na linii

 

nErrors = SWmoddoc.SaveAs(FileNamePathPDF)

 

Czy na tym program się kończy?

 

Jeśli nie, to czy wszystkie warunki są w porządku? Możesz to sprawdzić za pomocą spies lub debug.print

1 polubienie

Witam wszystkich,

 

Aby przetestować makro, najlepiej jest umieścić punkt przerwania na początku, a następnie nacisnąć F8, aby przejść wiersz po wierszu, jak mówi Lucas P. Innym rozwiązaniem jest włączenie paska menu "Debuguj" lub jeszcze lepiej dostosowanie edytora makr poprzez umieszczenie przycisku "Szczegółowy krok" (') przed przyciskiem "Uruchom" () na standardowym pasku narzędzi, aby nie przeciążać. > modus operandi > zob. załącznik.

W przeciwnym razie w edytorze makr "Widok" Okno lokalne umożliwia przeglądanie wartości wszystkich zmiennych, gdy makro jest uruchomione.

 

 

Miłego dnia.


personnaliser_lediteur_de_macro.png

Przepraszam, nie rozumiem, o co mnie prosisz, z drugiej strony, jak ci mówiłem, tworzy folder, jeśli go nie ma i tworzy PDF, ale w tym samym folderze co SLDDRW, nie rozumiem.

Nie zagłębiłem się jeszcze w Twój kod, przyznaję się!

 

Właśnie zobaczyłem, że następujący wiersz jest prawdopodobnie błędny:

 

        MkDir "nazwa_plikuPDF"

 

1) Wydaje mi się, że aby utworzyć katalog, musisz podać pełną nazwę wraz ze ścieżką!

2) Nie potrzebujesz cudzysłowów do zmiennej "FileNamePDF", w przeciwnym razie nie jest to już zmienna, ale tekst!

 

Wygodnym sposobem sprawdzenia i odczytania kodu VBA jest użycie Notepad++ , który można znaleźć tutaj:

http://notepad-plus-plus.org/download/v6.6.7.html

 

Następnie wklej kod do nowego pliku i wybierz z menu Język > V > VB.

 

Formatowanie kolorów jest znacznie bardziej wymowne niż w podstawowym edytorze VBA.

Zmienne są wyświetlane w kolorze czarnym, a tekst jest wyświetlany w kolorze szarym.

2 polubienia

Zmodyfikowałem zmienną w SWmoddoc.SaveAs(PathFileNamePDF), umieściłem pełny adres z plikiem, to nie zadziałało, po prostu umieściłem nazwę pliku pdf i tworzy go dla mnie w tym samym folderze co slddrw, i coś innego, jeśli folder, w którym chcę zapisać pdf, już istnieje, Ten błąd, czy ktoś może mi pomóc zrozumieć, oto tekst mojego makra.


sans_titre.png

Witam

 

Myślę, że błąd pochodzi ze zmiennej "PathPDFfileName" w tym poleceniu:

nErrors = SWmoddoc.SaveAs(FileNamePathPDF)

 

Kiedy zapisujesz za pomocą polecenia "Zapisz jako", musisz podać pełną nazwę pliku jako argument, Z rozszerzeniem (.pdf w Twoim przypadku).

 

Pozdrowienia.

 

Franck.

Widziałem to po Lucasie, zmodyfikowałem to, ale nadal nie działa.

Fgirard, też to widziałem, zmodyfikowałem, ale nadal nie działa do końca.

Aby zapoznać się z punktami przerwania, spójrz na link, który umieściłem powyżej:

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

 

Wyjaśniono kilka sposobów debugowania kodu, w tym punkty przerwania.

 

1 polubienie

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