In der Anwendung werden häufig komplexe Zellen (oder Pseudozellen) in die Zeichnung platziert, bei denen bereits Sachdaten angehängt sind und mit Vorgabewerten versehen sind.Diese Vorgabewerte sind vor längerer Zeit beim Erstellen der Zellen festgelegt worden und sind vielleicht nicht mehr aktuell und dürfen so nicht verwnedte werden.Man kann nun VBA sehr schön dazu verwenden, solche Sachdatenwerte zu bereinigen, indem konkret nach solchen Sachdaten gesucht werden und die Werte bereinigt werden.Wobei bereinigt werden hier bedeuten soll, dass die Sachdaten selber nicht gelöscht, sondern nur der Inhalt gelöscht wird.
Hier dazu ein einfaches Beispiel, das zunächst einen Auswahlsatz aller im aktiven Modell platzierter Zellen macht und diese Zellen einzeln überprüft, ob Sachdaten vorhanden sind, und wenn ja, dann diese ausliest und die Namen überprüft.
Sind die richtigen Sachdaten gefunden, dann werden die Werte zurückgestzt, d.h.als Wert ein leerer String zugeweisen:
Option Explicit Sub tag_clear() Dim Sc As New ElementScanCriteria Dim Ee As ElementEnumerator Dim otags() As TagElement Dim i As Integer ' Suchen nach Zellen: Sc.ExcludeAllTypes Sc.IncludeType msdElementTypeSharedCell 'Pseudozellen (Type 35) Sc.IncludeType msdElementTypeCellHeader 'Typ 2 Zellen Set Ee = ActiveModelReference.Scan(Sc) ' Jede Zelle auf Sachdaten prüfen. ' Wenn Sachdaten vorhanden und der Name übereinstimmt, dann bereinigen: Do While Ee.MoveNext If Ee.Current.HasAnyTags Then otags = Ee.Current.GetTags For i = LBound(otags) To UBound(otags) If otags(i).TagSetName = "tagsetname" Then ' Beispielname eines Tagsets If otags(i).TagDefinitionName = "tagname" Then ' Beispielname eine Tags otags(i).Value = "" otags(i).Rewrite End If End If Next End If Loop End Sub
In dem obigen Beispiel sind die Namen des Sachdatensatzes und der Sachdaten fest eingestellt. Auf diese Weise kann diese VBA Routine durchaus im Batchbetrieb eingesetzt werden, jedoch müsste bei mehreren verschiedenen Namen jedesmal eine Änderung im Programm vorgenommen werden.
Um deshalb die Routine etwas leichter für verschiedene Namen anwenden zu können, hier noch ein erweitertes Beispiel, bei dem die zu prüfenden Namen als Parameter beim Aufruf der VBA Routine mitgegeben werden müssen.Die Aufrufparameter findet man in Keyinarguments, die hier in die Komponenten zerlegt und im Array sNamen abgelegt werden. Als Trennzeichen wird ein Leerzeichen angenommen.Wenn kein oder nur 1 Parameter mitgegeben wurde, bricht die Routine mit einer Meldung im Nachrichtencenter ab:
Option Explicit Sub tag_clear() Dim Sc As New ElementScanCriteria Dim Ee As ElementEnumerator Dim otags() As TagElement Dim i As Integer Dim sNamen() As String sNamen = Split(KeyinArguments, " ") If UBound(sNamen) <= 0 Then ' es wurden nur 1 oder gar kein Parameter mitgegeben MessageCenter.AddMessage "Es fehlen Parameter zum Bereinigen der Sachdaten", , msdMessageCenterPriorityError Exit Sub ' beenden der Routine End If ' Suchen nach Zellen: Sc.ExcludeAllTypes Sc.IncludeType msdElementTypeSharedCell 'Pseudozellen (Type 35) Sc.IncludeType msdElementTypeCellHeader 'Typ 2 Zellen Set Ee = ActiveModelReference.Scan(Sc) ' Jede Zelle auf Sachdaten prüfen. ' Wenn Sachdaten vorhanden und der Name übereinstimmt, dann bereinigen: Do While Ee.MoveNext If Ee.Current.HasAnyTags Then otags = Ee.Current.GetTags For i = LBound(otags) To UBound(otags) If otags(i).TagSetName = Trim(sNamen(0)) Then ' Beispielname eines Tagsets If otags(i).TagDefinitionName = Trim(sNamen(1)) Then ' Beispielname eine Tags otags(i).Value = "" otags(i).Rewrite End If End If Next End If Loop End Sub
Der Aufruf dieser Routine muss nun mit mindestens 2 Parametern erfolgen, wobei der 1. Parameter der Name des Sachdatensatzes und der 2. Parameter als der Name des Sachdatums angenommen wird.
Folgender Aufruf bei geladener VBA Routine kann beispielsweise so lauten, um dasselbe Ergebnis wie beim ersten Beispiel zu erzielen:
vba run tag_clear tagsetname tagname
Man könnte sich jetzt weitere Anwendungen vorstellen, indem die Werte nicht bereinigt, sondern neu besetzt werden, die neuen Werte könnten beispielsweise als 3. Parameter eingebunden werden, usw...
Viel Spass beim Ausprobieren!