| |
| Aucotec auf der ACHEMA 2024: Effiziente und nachhaltige Lösungen durch kooperatives Engineering, eine Pressemitteilung
|
Autor
|
Thema: Zugriff auf Verknüpfungen in VBA (2510 mal gelesen)
|
WTE Mitglied Informatiker
Beiträge: 5 Registriert: 13.08.2014
|
erstellt am: 21. Aug. 2014 09:12 <-- editieren / zitieren --> Unities abgeben:
Hallo Gemeinde, kennt einer eine Möglichkeit, wie ich per VBA-Makro auf Verknüpfungen zugreifen kann? Hintergrund ist folgender: Ich würde gerne per Makro die erzeugten Kabelziele vertauschen. Die Kabelziele sind ja nur Verknüpfungen auf Elemente, die im Betriebsmittelordner angelegt sind. Leider kann ich mir noch nicht einmal die Attribut-ID’s der Kabelziele anzeigen lassen und habe daher keinen Ansatzpunkt. Hat jemand eine Idee, wie ich dieses Problem lösen bzw. im Ansatz lösen kann? Danke für eure Hilfe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ismo Mitglied
Beiträge: 97 Registriert: 20.11.2011
|
erstellt am: 22. Aug. 2014 08:19 <-- editieren / zitieren --> Unities abgeben: Nur für WTE
|
WTE Mitglied Informatiker
Beiträge: 5 Registriert: 13.08.2014
|
erstellt am: 27. Aug. 2014 10:37 <-- editieren / zitieren --> Unities abgeben:
Hallo, leider hat dieses auch nicht funktioniert und der andere Thread tat mir nicht wirklich weiterhelfen Es muss noch einen anderen Weg geben, um die Verknüpfungen zu vertauschen - händisch funktioniert es ja schließlich auch. Und das sowas gehen muss, beweist das Makro "Kabelziele aus Drahtziele generieren". Leider ist dies gesperrt, sodass es mir den VBA-Code der sich dahinter verbringt nicht einsehen kann. Hat noch jemand einen Lösungsweg?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mike EB Mitglied
Beiträge: 77 Registriert: 15.12.2010 EB 6.4.2
|
erstellt am: 08. Sep. 2014 15:35 <-- editieren / zitieren --> Unities abgeben: Nur für WTE
Hallo, ich habe mir dafür mal folgendes Makro geschrieben: ' SwitchWireTargets ' Tauscht Ziele eines Drahtes ' ' ABUS Kransysteme GmbH ' Mike Ebert 09.01.2013 ' ' Change log: ' Datum Name Bemerkung ' Public Sub SwitchWireTargets() Dim colObj As ObjectItems Dim oObj As ObjectItem Dim oTgt As ObjectItem Dim oTgt1 As ObjectItem Dim oTgt2 As ObjectItem Dim pTgt1Role As AucRole Dim pTgt2Role As AucRole Set colObj = Application.Selection For Each oObj In colObj If oObj.Kind = aucObjWire Then 'Nur bei Draht With oObj.TargetAssociations If .Count = 2 Then 'Zwei Drahtziele ' If (.Item(1).Role = aucRolePin1Wire And .Item(2).Role = aucRolePin2Wire) Or _ (.Item(2).Role = aucRolePin1Wire And .Item(1).Role = aucRolePin2Wire) Then Set oTgt1 = .Item(1).RelatedObject Set oTgt2 = .Item(2).RelatedObject pTgt1Role = .Item(1).Role pTgt2Role = .Item(2).Role .Delete pTgt1Role, oTgt1 .Delete pTgt2Role, oTgt2 ElseIf .Count = 1 Then 'Ein Drahtziel Set oTgt1 = .Item(1).RelatedObject pTgt1Role = .Item(1).Role .Delete pTgt1Role, oTgt1 Else Exit Sub End If 'Drahtziele tauschen Set oTgt = oTgt1 Set oTgt1 = oTgt2 Set oTgt2 = oTgt 'Neue Ziele setzen .New pTgt1Role, oTgt1 .New pTgt2Role, oTgt2 End With End If Next oObj End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MeckPom Mitglied Ing.
Beiträge: 47 Registriert: 27.09.2012
|
erstellt am: 10. Sep. 2014 22:42 <-- editieren / zitieren --> Unities abgeben: Nur für WTE
Wenn man sich das Objektmodell im Local-Fenster des Debuggers ansieht, ist es nicht allzuschwer damit kalrzukommen. In der EB-VBA-Hilfe (nicht via F1) ist dies auch erläutert. Jedes ObjectItem hat die "arrays" TargetAssociations und SourceAssociations. Im Ersten stehen die Verweise zu einem andern Objekt (z.B. Gerät=>Funktion von dem Gerät aus betrachtet). Im Zweiten stehen die Verweise, die von einem andern Objekt kommen (z.B. Gerät=>Funktion von der Funktion aus betrachtet). Die zugehörigen Typendefinitionen sind Association und Associations. Association.RelatedObject beschreibt die Gegenstelle der Verbindung und Association.Role beschreibt die Art der Verknüpfung. Mit den für Source- bzw. TargetAssociations definierten Methoden kann man die Verknüpfungen normal bearbeiten. Zu beachten ist dabei, daß für ein Objekt nicht alle verfügbaren Arten statthaft sind. Für die meisten Arten gibt es aber weitgehend selbsterklärende Konstanten (aucRoleDev....). Desweiteren ist unter TargetAssociations für jede Art nur eine Verknüpfung zulässig. Es fehlt eine Methode, um einfach das "RelatedObject" abzuändern. Das bedeutet, daß man erst die Verknüpfung zum alten Objekt löschen muß und dann die neue Verknüpfung anlegt. Es gibt ein paar wenige Verknüpfungen, die zwar im Explorer angezeigt werden, aber in dem VBA-Objekt nicht zu finden sind. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xymaddin Mitglied
Beiträge: 45 Registriert: 13.01.2016
|
erstellt am: 28. Feb. 2018 15:12 <-- editieren / zitieren --> Unities abgeben: Nur für WTE
Hallo Leute ich weiss zwar nicht ob es hier hingehört aber da es um Verknüpfungen geht versuch ich es mal Ich möchte an einem Blattobjekt das Zugeordnete Betriebsmittel auslesen wie geht das? ------------------ Grüße xymaddin EB 6.6.1 Power User Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
WickieEB Mitglied Alg. Konstruktör
Beiträge: 34 Registriert: 16.04.2015
|
erstellt am: 02. Mrz. 2018 17:24 <-- editieren / zitieren --> Unities abgeben: Nur für WTE
Hi, wie Meckpom geschrieben hat, muss man in einen der beiden Assozitionscontainer schauen. Für die Beziehung Gerät/Funktion zu Blatt ist das dann SourceAssociation mit den Kennnummern 106/107. Oder als Formel: Rb106;Ar; Gruß WickieEB ------------------ Wer A sagt, der muss nicht B sagen. Er kann auch erkennen, dass A falsch war. (Bertold Brecht) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
WM1407 Mitglied
Beiträge: 4 Registriert: 09.05.2016
|
erstellt am: 26. Apr. 2018 09:03 <-- editieren / zitieren --> Unities abgeben: Nur für WTE
|
AlexSt Mitglied Elektrokonstrukteur
Beiträge: 176 Registriert: 21.02.2012 ELCAD 7 Engineering Base 6 EPLAN P8 V2
|
erstellt am: 04. Mai. 2018 12:07 <-- editieren / zitieren --> Unities abgeben: Nur für WTE
Hi WM1407, das Objekt im VBA muss vom Typ "Cable" sein. So kommst du an die "Destinations" (siehe Screenshot). Ob und wie man diese dann tauschen kann ist noch zu prüfen .
------------------ Gruß aus Bielefeld Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
WM1407 Mitglied
Beiträge: 4 Registriert: 09.05.2016
|
erstellt am: 04. Mai. 2018 12:29 <-- editieren / zitieren --> Unities abgeben: Nur für WTE
|