@daywa1k3r:
Vielen Dank für Deine Antwort.
Den Code habe ich unten beigefügt.
Mit der Beispieldatei dauert es noch etwas, da ich diesen entsprechend abändern muss (Firmengeheimnis etc. ...) und der Fehler nicht immer auftritt.
Danke und Grüße
MB-Ing.
' Alle fehlerhaften Referenzen (projezierte Geometrie) der Skizzen
' des aktiven Bauteils werden gelöscht.
' Anschließend werden die Namen dieser Skizzen ausgegeben.
Public Sub SkizzenBereinigen()
On Error GoTo errhandler
'Wenn kein Bauteil, dann Exit
If ThisApplication.Documents.Count = 0 Then Exit Sub
If Not ThisApplication.ActiveEditDocument.DocumentType = kPartDocumentObject Then Exit Sub
Dim oPartDoc As PartDocument
Set oPartDoc = ThisApplication.ActiveEditDocument
'Transaktion starten für Rückgängigschritt
' Dim otrans As Transaction
' Set otrans = ThisApplication.TransactionManager.StartTransaction(oPartDoc, "Skizzen bereinigen")
Dim sText As String
sText = "Fehlerhafte Referenzen in Skizzen entfernt:" & vbNewLine
Dim bPurgeOneSketch As Boolean
Dim bPurgeAllSketch As Boolean
Dim blRef As Boolean
bPurgeAllSketch = False
Dim oSketch As PlanarSketch
For Each oSketch In oPartDoc.ComponentDefinition.Sketches
'Wenn in der Skizze Referenzen verloren gegangen sind
If oSketch.HealthStatus = kDriverLostHealth Then
bPurgeOneSketch = False
Dim oEntity As SketchEntity
'Gehe durch alle Skizzenelemente
For Each oEntity In oSketch.SketchEntities
'Wenn es sich um ein Referenzelement handelt, keine Referenzelement mehr verfügbar ist
'und das Referenzelement nicht an einer anderen Referenz hängt
If oEntity.Reference = True And oEntity.ReferencedEntity Is Nothing And oEntity.OwnedBy.Count = 0 Then
blRef = False
'Bei Referenzpunkten prüfen, ob Referenzelemente daran hängen
If oEntity.Type = kSketchPointObject Then
Dim oAttEntity As SketchEntity
For Each oAttEntity In oEntity.AttachedEntities
If oAttEntity.Reference = True Then
blRef = True
End If
Next
End If
'Wenn alle Bedingungen erfüllt, dann Element löschen
If blRef = False Then
Call oEntity.Delete
bPurgeOneSketch = True
bPurgeAllSketch = True
End If
End If
Next
'Wenn fehlerhafte Referenzen gefunden, dann Skizzennamen ausgeben
If bPurgeOneSketch = True Then
sText = sText & oSketch.Name & vbNewLine
End If
End If
Next
'Wenn keine fehlerhafte Referenz gefunden
If bPurgeAllSketch = False Then
sText = "Keine löschbaren fehlerhafte Referenzen in Skizzen gefunden!"
End If
Call MsgBox(sText, vbInformation + vbOKOnly, "Skizzen bereinigen")
oPartDoc.Update
' otrans.End
Exit Sub
errhandler:
MsgBox "Error: " & Err.Description, vbCritical, "Skizzen bereinigen"
' If Not otrans Is Nothing Then otrans.Abort
Resume Next
End Sub
------------------
Wissen ist Macht. Nichts wissen macht auch nichts
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP