Witam, długo próbowałem stworzyć proste makro do eksportu w DXF bieżącego widoku mojej części (.part), bez względu na to, jak bardzo staram się używać exporttoDWG2, nigdy nie udaje mi się uruchomić mojego maccro, zaczynam od daleka w VBA również próbowałem zhakować kilka kodów, które znalazłem na inne tematy, ale nic nie pomaga. a ChatGPT nie zdołał zaspokoić mojej potrzeby, mimo że wydaje się to proste.
Nie mogę się doczekać, aby przeczytać Cię na forum inżynierowie
ChatGPT ... Ale co wy wszyscy macie teraz z tym czymś? To nigdy nie jest tylko robot, który kopiuje i wkleja fragmenty tekstu, które widzi. Krótki
Czy próbowałeś stworzyć makro, ucząc się, rejestrując swoje ruchy podczas tworzenia DXF? Może to pozwolić Ci zobaczyć podstawowe funkcje, które są wywoływane dla Twojego działania
Jest to narzędzie Gpt, moim zdaniem to znacznie więcej, ale tak, pobiera te informacje z dużej bazy danych. W skrócie²
Tak, zacząłem od zrobienia tego, ale nawet jeśli utworzę DXF z mojej części, generuje kod, próbuję ponownie z tą samą częścią, usuwając wcześniej wykonany DXF, uruchamia się, ale wydaje się, że nie wykonuje żadnej czynności i nie ma tworzenia DXF na wyjściu...
' ******************************************************************************
' macro recorded on 04/21/23 by CAO21
' ******************************************************************************
Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Sub main()
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
' Save As
longstatus = Part.SaveAs3("mon chemin.DXF", 0, 2)
' Redraw
Part.GraphicsRedraw2
Set Part = swApp.ActiveDoc
Dim myModelView As Object
Set myModelView = Part.ActiveView
myModelView.FrameLeft = 0
myModelView.FrameTop = 22
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Set Part = swApp.NewDocument("C:\ProgramData\SolidWorks\SOLIDWORKS 2020\templates\Mise en plan.drwdot", 0, 0, 0)
swApp.ActivateDoc2 "Mise en plan25 - Feuille1", False, longstatus
Set Part = swApp.ActiveDoc
Set Part = swApp.ActiveDoc
Set myModelView = Part.ActiveView
myModelView.FrameLeft = 0
myModelView.FrameTop = 22
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
swApp.ActivateDoc2 "nom piece", False, longstatus
Set Part = swApp.ActiveDoc
' New View
Part.NameView "*En cours"
Dim myView As Object
Set myView = Part.CreateDrawViewFromModelView3("cheminpiece", "*En cours", 0, 0, 0)
boolstatus = Part.DeleteNamedView(*En cours)
Part.ClearSelection2 True
End Sub
oto kod, który mi wychodzi... a kiedy uruchamiam go później, pojawia się błąd synthaxis
Witam W przypadku błędu składniowego jest on spowodowany zapomnieniem cudzysłowów wokół *W toku. Bez cudzysłowów traktuje ją jako zmienną, więc ponieważ nie istnieje lub jest pusta, zwraca błąd.
Witam Cyril dziękuję za odpowiedź, rozwiązało to błąd synthaxe, niemniej jednak problem przesuwa się nieco niżej, kiedy uruchamiam makro pojawia się komunikat następny:
Linia
Set myView = Part.CreateDrawViewFromModelView3("chemin de ma pièce.SLDPRT", "*En cours", 0, 0, 0)
jest teraz podświetlony,
Po uruchomieniu makra otwiera się również pusty rysunek.
Witam Po analizie makro moim zdaniem nie jest stworzone na taką potrzebę. Powinniśmy raczej przyjrzeć się temu kodowi i w razie potrzeby go dostosować.
Dołączone makro powinno być w stanie zapisać bieżący widok części w formacie DXF lub DWG. Dokument musi być otwarty, a dokument aktywny. Należy zauważyć, że obiekty powierzchniowe nie są uwzględniane w funkcji eksportu SolidWorks.
EDIT: działa doskonale na 2 z 3 stacji, na 3 makro działa, ale wtedy nie da się stworzyć nowego pomieszczenia, problem utrzymuje się do momentu otwarcia kolejnego pomieszczenia. Masz pomysł, skąd może pochodzić ten błąd? (Jest to szczegół, biorąc pod uwagę, że na etapie tworzenia DXF teoretycznie nie jesteśmy już w fazie tworzenia nowych części)
Mam to samo zachowanie na moim komputerze, menu powiązane z funkcją tworzenia nie odpowiada po uruchomieniu makra. Postępując zgodnie z instrukcją krok po kroku, utworzenie nowej części jest możliwe w całym makrze, aż do funkcji ExportToDWG2, i staje się niemożliwe po... Wydaje się, że to jest przyczyną problemu i nie mam pojęcia, jak go obejść.
Wygląda na to, że ten GPT nie ustrukturyzował dobrze kodu, niemniej jednak pokazał dobrą logikę {think}, utwórz mep bieżącego widoku, a następnie wyeksportuj do dxf, nieźle,
Option Explicit
Dim swApp As Object
Dim swModel As ModelDoc2
Dim swdrawing As DrawingDoc
Dim status As Boolean
Const modelPath As String = "C:\ProgramData\SOLIDWORKS\SOLIDWORKS 2018\templates\Drawing.drwdot"
Const nameView As String = "Current"
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If Not (swModel.GetType() = 1 Or swModel.GetType() = 2) Then
MsgBox "Fonctional only on 'Part' or 'Assembly' documents.", vbCritical
End
End If
Dim path As String
path = swModel.GetPathName
On Error GoTo err
swModel.nameView nameView
Set swdrawing = swApp.NewDocument(modelPath, 0, 0, 0)
swdrawing.CreateDrawViewFromModelView3 path, nameView, 0, 0, 0
Set swModel = swApp.ActiveDoc
path = Left(path, InStr(1, path, ".")) + "dxf"
Dim error As Long, warning As Long
status = swModel.Extension.SaveAs(path, 0, 1, Nothing, error, warning)
swApp.CloseDoc ""
Set swModel = swApp.ActiveDoc
swModel.DeleteNamedView nameView
If status = False Then GoTo err
MsgBox "Success", vbInformation
Exit Sub
err:
MsgBox "Error in processing", vbCritical
End Sub
Byłby w stanie odgadnąć, że nazwa (*W trakcie) należy do palety widoków, a nie do szablonu
Witam Myślę, że jest to bardziej związane z faktem, że nie opróżniamy obiektów z pamięci. Formularz pozostaje aktywny w domu, ale nie przeszkadza mi przynajmniej w utworzeniu nowego pliku (nie próbowałem nic w nim zrobić). Myślę, że powinienem dodać "Ustaw xxx = Nic" w różnych punktach makra.
@m_blt z tym makrem nie mam żadnych problemów po eksporcie do stworzenia nowej części ale miałem problem z inną, nie miałem czasu do niego zajrzeć, aby zobaczyć różnicę między tymi dwoma, ale czy to pomaga.