Makroproblem beim DXF-Blechexport

Hallo zusammen, ich habe ein Makro geschrieben, um die abgewickelten Blechteile zu exportieren, alles funktioniert gut, wenn es von einem Teil aus eingegriffen wird.

Ich möchte, dass es auch dann funktioniert, wenn es sich bei dem aktiven Dokument um einen Plan handelt (ich komme für den Exportschritt dorthin).

Das Objekt besteht darin, in dem Fall, in dem der Ausgangspunkt ein Plan ist, den gleichnamigen Teil zu öffnen/aktivieren und dann über ExportToDWG2 zu exportieren.

Aber ich bekomme in diesem Zusammenhang den Fehler "Eigenschaft oder Methode wird von diesem Objekt nicht behandelt", Ideen?

(Nach dem Öffnen des Teils teilt mir jedoch MsgBox ("Das aktive Dokument ist: " & swApp.ActiveDoc.GetTitle) mit, dass das Teil aktiv ist)

---------------------------------KONTEXTPRÜFUNG UND START-------------------------

Sub dxfexport()

Wenn nicht, ist swDOC nichts, dann
Wenn swDOC.GetType = swDocDRAWING dann
Wenn fso. FileExists(PART_PATH) dann
openpart aufrufen
Rufen Sie dxf auf
Rufen Sie closepart an

    Else: MsgBox ("Pièce Introuvable")
    End If
ElseIf swDOC.GetType = swDocPART Then
    'openpart
    dxf
End If

Oder
MsgBox "Bitte öffnen Sie ein Dokument", vbAusrufezeichen + vbOKOnly
Ende, wenn

Ende Sub

--------------------------------- ERÖFFNUNG DES RAUMS----------------------------
Sub openpart()
Dimmen swApp als Objekt
Teil als Objekt dimmen
Dim boolstatus als boolescher Wert
Dim longstatus As Long, longwarnings As Long
Legen Sie swApp = Application.SldWorks fest
Set Part = swApp.ActiveDoc

Tun
Wenn fso. FileExists(PART_PATH) dann
Set Part = swApp.OpenDoc6(PART_PATH, 1, 0, "", longstatus, longwarnings)
swApp.ActivateDoc3 PART_PATH, False, swRebuildOnActivation_e.swDontRebuildActiveDoc, longstatus
'swApp.ActivateDoc2 PART_PATH, Falsch, longstatus
Set Part = swApp.ActiveDoc
Ansonsten: MsgBox ("Teil nicht gefunden")

Ende, wenn
Schleife bis Part.GetType = swDocPART

Teil.EditRebuild3
Teil.ViewZoomtofit2
MsgBox ("Das aktive Dokument ist: " & swApp.ActiveDoc.GetTitle)
Ende Sub

-------------------------------------------EXPORTIEREN------------------------------------
Sub dxf()

Dimmen von modelPath als Zeichenfolge
Dim longstatus As Long

modelPath = swDOC.GetPathName



Dim OUT_PATH As String
OUT_PATH = EXPORT_PATH & FILE_NAME & Indice + ".DXF"

Dim options As Long
options = 1 Or 2 Or 4 Or 8 Or 16 Or 32

'Codes d'options d'export:
'ExportFlatPatternGeometry = 1
'IncludeHiddenEdges = 2
'ExportBendLines = 4
'IncludeSketches = 8
'MergeCoplanarFaces = 16
'ExportLibraryFeatures = 32
'ExportFormingTools = 64
'ExportBoundingBox = 2048

If modelPath = "" Then
Err.Raise vbError, "", "Enregistrez votre pièce avant export"

Oder

If False = swDOC.ExportToDWG2(OUT_PATH, PART_PATH, swExportToDWG_e.swExportToDWG_ExportSheetMetal, True, Empty, False, False, options, Empty) Then
    Err.Raise vbError, "", "Erreur d'export DXF"
End If

Ende, wenn

Ende Sub

Hallo @Clément_Barillot_1 ,

Der Fehler ist wahrscheinlich auf die ExportToDWG2-Methode zurückzuführen, die für die IPartDoc-Klasse und nicht für ImodelDoc2 spezifisch ist.
Daher muss das aktive Teiledokument einer swPart-Variablen vom Typ SldWorks.PartDoc zugewiesen werden.

 Dim swPart As SldWorks.PartDoc
        Set swPart = swApp.ActiveDoc
        If False = swPart.ExportToDWG2(OUT_PATH, PART_PATH, swExportToDWG_e.swExportToDWG_ExportSheetMetal, True, Empty, False, False, options, Empty) Then
            Err.Raise vbError, "", "Erreur d'export DXF"
        End If
1 „Gefällt mir“

VIELEN DANK! Ich kämpfe seit mehreren Tagen, ich habe sogar chatGPT benutzt, um mir zu helfen... Du bist im Moment besser als " er " :wink:

Danke noch einmal

Hallo
Damit dies funktioniert, müssen Sie auch die Deklarationen in die Hauptfunktion verschieben (vorher in global), die "dxfexport()" und nicht "openpart()" ist.
Fügen Sie die Referenz, die Deklaration und die Zuweisung des "BFS" hinzu,
Löschen Sie die "do"-Schleife, dass, wenn das fso die Datei nicht findet, dies zu einer Endlosschleife führt,
(so hat es bei mir funktioniert)

In Wirklichkeit war es ein Fehler meinerseits in openpart:

Set Part = swApp.ActiveDoc
Statt
Legen Sie swDOC = swApp.ActiveDoc fest

Aber dxf() exportiert auf der Basis von swDOC...

Also unweigerlich... Das Prinzip war gut, aber die Variable, nicht...

Die Intervention von Herrn Blt ermöglichte es mir, dies ganz einfach zu erkennen...

Was die Deklarationen betrifft, so habe ich immer noch Duplikate, aber sie sind vom Typ Public und nicht Dim, wenn Main() initialisiert wird.

dxfexport() ist nicht meine Hauptfunktion, das vollständige Makro exportiert in DXF, STEP + PDF, egal ob Sie sich in einem Raum oder dessen Plan befinden.

Ich werde mal sehen, wie es mit der Unsichtbarkeitsschleife aussieht, ich hatte bisher noch keine Probleme, aber ich werde es notieren...

Hallo
Nehmen wir an, dass dort ein geringeres Risiko besteht, da die Datei notwendigerweise existiert.
Auf der anderen Seite frage ich mich, was der Sinn dieser Kontrolle über die Existenz der Datei ist, denn wenn ich es richtig verstanden habe, haben wir entweder die 3D direkt geöffnet oder wir öffnen sie aus der 2D, also existiert sie notwendigerweise.
Bearbeiten: Auf der anderen Seite wäre es viel nützlicher, zu überprüfen, ob die exportierte Datei noch nicht existiert (und das zugehörige Verhalten zu erzeugen)

Hallo
Ich habe vermutet, dass es noch andere Funktionen gibt, aber ich kann nur mit dem umgehen, was Sie gepostet haben :wink:

Hallo Cyril
In der Tat existiert die 3d sicherlich, aber nicht unbedingt mit dem gleichen Namen, oder noch mehr in dem angegebenen Verzeichnis, das die Schleife mit einer unendlichen Nachricht beginnt

Äh, nein, wenn es aus einer 2D-Ansicht gewonnen wird, kann es nur an dem definierten Ort existieren, es sei denn, es handelt sich um eine virtuelle Datei eines ASM, aber meines Wissens ist dies hier nicht der Fall.
Wenn ich es richtig verstanden habe, ist es SW geöffnet mit der Datei im Visual, also muss es existieren.

Was nicht der Fall ist, da er in dem Beitrag den gleichen Namen wie die Zeichnung angegeben hat

1 „Gefällt mir“

Genau, falsch gelesen

1 „Gefällt mir“