Nagrywanie makr jako aktywny arkusz pdf

Cze wszystkim

Obecnie mam makro, które pozwala mi zapisać mój dokument .slddrw w formacie pdf w tym samym katalogu i o tej samej nazwie.

Jak dotąd jest dobrze, problem polega na tym, że zapisuje wszystkie arkusze mojego rysunku i chcę, aby zapisywał mi tylko aktywny arkusz po uruchomieniu makra.

Jestem pewien, że rozwiązanie jest proste, ale nic do zrobienia Nie mogę znaleźć odpowiedniego kodu, oto makro, które dostałem z forum i którego używam:

'**************************************************************************************************************************
'* Przykład makra, które pozwala zapisywać dokumenty jako pliki PDF
'* Możesz zmienić rozszerzenie, aby zapisać dokument w dowolnym formacie obsługiwanym przez oprogramowanie
'* Na podstawie przykładu wykonanego przez Axemble "Saveas_pdf"
'* Edycja przez MCD
'**************************************************************************************************************************
Sub main()
    Dim swApp jako SldWorks.SldWorks
    Dim swmodel As SldWorks.ModelDoc2
    Dim stPath As String (Ciąg znaków
    Dim lgFile tak długo
    Dim blretval jako Boolean
    Błędy przyciemnienia tak długo
    Ostrzeżenia o przyciemnieniu tak długo
    
    Ustaw swApp = Application.SldWorks
    "Dostajemy aktywny dokument
    Ustaw swmodel = swApp.ActiveDoc
    
    jezeli nie swmodel to nic to nic
       "Sprawdzamy, czy plik jest zarejestrowany
        Jeśli swmodel. GetPathName = "" Następnie
            MsgBox "Proszę zapisać dokument przed uruchomieniem makra", vbInformation
            Koniec
        Inaczej
            "Otrzymujemy lokalizację pliku
            stPath = swmodel. GetPathName (Nazwa_ścieżki)
            "Zwiększamy liczbę znaków do . rozszerzenia
            lgFile = InStrRev(stPath, ".", -1, vbTextCompare) - 1
            "Odzyskujemy ścieżkę bez przedłużenia
            Jeśli lgFile > 0, to
                  stPath = Lewo(stPath, lgFile)
            Zakończ jeżeli:
        Zakończ jeżeli:
        
        "Jeżeli dokument jest dokumentem
        Jeśli swmodel. GetType = swDocPART Następnie
           Tworzymy rozbudowane
            'blretval = swmodel. ExportFlatPatternView(stPath & ". DXF", 1)
            Powstał plik DXF
            'blretval = swmodel. SaveAs3(stPath & ". DXF", 0, 0)
             MsgBox "To jest plik Piéce'a. Otwórz rysunek, aby utworzyć plik PDF", vbInformation
            
            "Jeśli dokument jest rysunkiem
        ElseIf swmodel. GetType = swDocDRAWING Następnie
            Powstał plik DXF
            'blretval = swmodel. Zapisz_jako3(stPath & "_drw.pdf", 0, 0)
            Utwórz plik PDF
            blretval = swmodel. SaveAs3(stPath & ".pdf", 0, 0)
            
            
        Zakończ jeżeli:
    
        "Zapisujemy plik
        blretval = swmodel. Zapisz3(0, 0, 0)
   
    Zakończ jeżeli:

Koniec subwoofera

 

Witam

Używasz metody SaveAs3, przechodząc do strony pomocy możesz zobaczyć, że ta metoda jest przestarzała:

http://help.solidworks.com/2012/English/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IModelDoc2~SaveAs3.html

I że zamiast tego powinieneś użyć SaveAs:

http://help.solidworks.com/2012/English/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IModelDocExtension~SaveAs.html

Za pomocą tej ostatniej metody możesz określić, który arkusz chcesz zapisać, zobacz ten przykład:

http://help.solidworks.com/2012/English/api/sldworksapi/Save_File_as_PDF_Example_VB.htm

Szczegółowe informacje na temat wyboru arkuszy:

http://help.solidworks.com/2012/English/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IExportPdfData.html

 

4 polubienia

Zaczyna to być dla mnie skomplikowane, czy możecie spróbować zmodyfikować moje makro  STP?

Masz wszystkie informacje, aby to zrobić.

W przeciwnym razie, ponieważ masz myCADtools, możesz użyć do tego jednego z narzędzi, może to być dla Ciebie łatwiejsze: Integration lub Batch Converter będą w stanie to zrobić.

3 polubienia

Całkowicie się z .PL zgadzam, cała praca jest przygotowana przed ;). Teraz, jeśli VBA wydaje Ci się skomplikowany i nie chcesz z nim zadzierać (co jest całkowicie zrozumiałe, nie ma oceny wartości!), małe gotowe oprogramowanie jest bardzo dobre.

 

Chciałbym jednak nieco stonować wypowiedzi @PL. Jestem pewien, że jeśli spróbujesz różnych rzeczy, poprosisz o wyjaśnienia w niejasnych punktach itp., on lub inna osoba tutaj będzie w stanie cię poprowadzić. Ale dając rzeczy już gotowe... Czy nie na pewno taka jest filozofia forum :)

1 polubienie

Daleki jestem od bycia wyniosłym, ale nie mam pod ręką SolidWorks, więc mogę przetestować makro na ślepo, kiedy mam czas, co nie ma miejsca dzisiaj!

Dobry wieczór

Wypróbuj ten:

 

Dim swApp jako SldWorks.SldWorks
Dim swModel As ModelDoc2
Dim lErrors tak długo
Dim lOstrzeżenia tak długo

Sub main()

Ustaw swApp = Application.SldWorks
Ustaw swModel = swApp.ActiveDoc
swModel.Extension.SaveAs GetFilename(swModel.GetPathName) & " rev." & swModel.GetCustomInfoValue("", "Revision") & ".pdf", swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, lErrors, lWarnings

Koniec subwoofera

Funkcja GetFilename(strPath As String) Jako ciąg
Dim strTemp As String
strTemp = Mid$(strPath, InStrRev(strPath, "\") + 1)
GetFilename = Left$(strTemp, InStrRev(strTemp, ".") - 1)
Zakończ funkcję

Dziękuję za odpowiedzi, przepraszam Manu67, nic się nie dzieje podczas uruchamiania makra.

Jeśli to nie zadziała, to dlatego, że jesteś w 2015 roku... Zadziałało to dla mnie w 2014 roku, ale nie w 2015 roku i działa ponownie w 2016 roku. Nie potrafię tego wytłumaczyć. Spróbuj przełączyć się na dodatek SP2 2016 lub poczekaj chwilę na dodatek SP3, jeśli możesz to zrobić.