Znajdź arkusz instalacji w VBA w solidworks

Witajcie ludzie.

 

Próbuję zrobić makro, aby zapisać każdy arkusz moich rysunków w formacie DXF i PDF. Do tej pory mogę zapisać wszystkie arkusze w odpowiednim formacie lub aktywować go, majstrując przy opcjach Solidworks.

 

Niemniej jednak chciałbym mieć możliwość bezpośredniej zmiany nazwy bez zmiany nazwy każdego pliku (tak nudne!) Krótki. Aby to zrobić, chciałbym móc powiedzieć mojemu makru, aby otworzyło arkusz, zapisało go, a następnie przeszło do następnego. Wiem, że muszę postawić na nim miernik.... Ale jak mam mu powiedzieć, żeby wziął arkusz1, potem 2 itd.

 

I małe pytanie dodatkowe. Czy jest gdzieś podsumowanie wszystkich poleceń specyficznych dla Solidworks?

 

Z góry dziękuję

1 polubienie

Witam

 

Zrobiłem podobne makro, ale używamy tylko jednego arkusza lub chcemy mieć 2 arkusze w tym samym pliku PDF.

 

Dla Twojego makra są już "gotowe"!

Zobacz tutaj:

https://forum.solidworks.com/thread/82929

https://forum.solidworks.com/thread/66753

 

A jeśli chodzi o polecenia, czy mówisz o poleceniach VBA dla SolidWorks?

 

Musisz skorzystać z pomocy interfejsów API:

http://help.solidworks.com/2014/English/api/sldworksapiprogguide/Welcome.htm

 

Albo wyszukiwanie w Google często pozwala na szybszą odpowiedź!

2 polubienia

Dla swojego "licznika" musisz zapętlić wszystkie arkusze, jeśli masz pewność, że zawsze jest to arkusz1, a następnie 2 itd., wszystko, czego potrzebujesz, to instrukcja taka jak ta:

 

[KOD]

 

i = 1

Czy (sheet_name istnieć) 'Nie znam instrukcji głowy

sheet_name = "Liść" & i

"Oto Twój kod do eksportu w formacie PDF i DWG

i = i +1

Pętla

 

[/KOD]

 

Ale jeśli dana osoba usunie arkusz 1 lub zmieni jego nazwę, to już nie działa!

 

Musisz więc pobrać nazwę lub numer każdego arkusza, a pomoc API SolidWorks oferuje przykład!

 

Oto on:

Edycja: aktualizacja linku, który był zły 

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

 

Zobacz również ten link:

http://help.solidworks.com/2013/english/api/sldworksapi/save_drawing_sheets_as_dxf_example_vb.htm

2 polubienia

Bardzo dziękuję Lucas P za szybkie i udzielone odpowiedzi.

 

Przynajmniej teraz jestem uzbrojony w przykłady (na szczęście mój angielski nie jest tak daleko w tyle!)

 

Tak, widziałem twoje podobne makro. Bardzo mnie to zainspirowało, jeśli chodzi o mnie, dostosowując go do moich potrzeb.

 

Z drugiej strony, z tego, co rozumiem z tego, co mi przysyłasz, jestem zobowiązany znać nazwy tych arkuszy. Jeśli nie jest to problemem dla moich opowiadań, to tak naprawdę nie radzę sobie z tym, co robili moi poprzednicy.

Miałem więc nadzieję, że uda mi się znaleźć coś takiego jak w Excelu, gdzie można umieścić "Arkusz1", aby oznaczyć ich, a nie ich nazwy.

 

Zamierzam się trochę pobawić, a potem wrócę i opublikuję cały kod, jeśli zadziała

1 polubienie

Przepraszam, umieściłem ten sam link 2 razy i nie zamieściłem najciekawszego:

 

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

 

Ten kod umożliwia przeglądanie wszystkich arkuszy na rysunku:

 

Dla i = 0 Do UBound(vSheetNames)

        Debug.Print "  NazwaArkusza[" & i & "] = " & vSheetNames(i)

Dalej i

 

 

I po prostu umieść swój kod w miejscu:

        Debug.Print "  NazwaArkusza[" & i & "] = " & vSheetNames(i)

1 polubienie

Mam makro, które idzie gładko ... ale gdzie nic się nie dzieje. Naprawdę nie rozumiem, dlaczego i gdzie to utknęło. Czy ktoś ma jakiś pomysł?

 

Zapisz podrzędnie()
Dim swapp As SldWorks.SldWorks
Przyciemnij swdoc jako SldWorks.ModelDoc2
Dim Swdraw jako SldWorks.ModelDoc
Przyciemnij swSheet jako SldWorks.Sheet
Dim vSheetNames As Variant
Dim Nbfeuille As Variant
Ustaw swapp = Application.SldWorks
Ustaw swdoc = swapp. Plik ActiveDoc
Ustaw Swdraw = swdoc
Set swSheet = Swdraw.GetCurrentSheet
"Komunikat potwierdzający
ret = MsgBox("czy chcesz przekonwertować ten rysunek na DXF i PDF?", vbOKCancel + vbExclamation + vbMsgBoxSetForeground + vbSystemModal, "Konwersja laserowa")
Jeśli ret = vbAnuluj, to Koniec
Rejestracja nowej nazwy
Robić
 newname = InputBox("Proszę określić nową nazwę:", "blabla", nowanazwa)
 Jeśli StrPtr(nowanazwa) = 0 to
 MsgBox "procedura anulowana"
 Wyjdź z subwoofera
 Zakończ jeżeli:
'Sprawdzanie okien z zakazanymi znakami
Wykonaj While InStr(nowa_nazwa, "/") > 0 Or InStr(nowa_nazwa, "*") > 0 Or InStr(nowa_nazwa, "?") > 0 Lub InStr(nowa_nazwa, "<") > 0 Or InStr(nowa, ">") > 0 Lub InStr(nowa, "!") > 0
 newname = InputBox("Proszę zauważyć, że nazwa zawiera co najmniej jeden z zabronionych znaków \/:*?""<>!" & vbNewLine & vbNewLine & "Proszę określić nową nazwę:", "save-under by LPR", newname)
 Pętla
 Pętla, podczas gdy nowa_nazwa = " "
"Dokumentacja rejestracyjna
Robić
 FilePath = InputBox("Określ ścieżkę", "folder nagrań", Ścieżka pliku)
 Jeśli StrPtr(ŚcieżkaPliku) = 0, to
 MsgBox "procedura anulowana"
 Wyjdź z subwoofera
Zakończ jeżeli:
'Dodanie znaku \ na końcu nazwy folderu
Jeśli Right(FilePath, 1) <> "\", to FilePath = FilePath & "\"
 Jeśli Dir$(FilePath) <> "" to
 ISTNIEJE = 1
 W przeciwnym razie: MsgBox "katalog nie istnieje, utwórz go"
 Debug.Print Dir$(FilePath)
Zakończ jeżeli:
Pętla, gdy ISTNIEJE <> 1
"Wskazuje liczbę arkuszy
Nbfeuille = swdoc. GetSheetCount (Liczba arkuszy)
Dla i = 0 Do Nbfeuille
    SWDOC. ArkuszPoprzedni
    Dalej i
    'Przejdź do następnego arkusza, jeśli < do całkowitej liczby
    Dla i = 0 Do varSheetCount - 1
    Jeśli <> 0 to
    SWMODEL. ArkuszNastępny
    Zakończ jeżeli:
Nagrywanie w formacie DXF i PDF
SWDOC. Zapisz jako (Ścieżka pliku + nowa_nazwa + "_" + i + ".dxf")
SWDOC. Zapisz jako (ŚcieżkaPliku + nowa_nazwa + "_" + i + ".pdf")
Dalej i
Koniec subwoofera

1 polubienie