| |
 | Umspannwerke nach IEC 61850 leicht gemacht, eine Pressemitteilung
|
Autor
|
Thema: Zählschleife in VBA (2327 mal gelesen)
|
WTE Mitglied Informatiker
 Beiträge: 5 Registriert: 13.08.2014
|
erstellt am: 13. Aug. 2014 08:27 <-- editieren / zitieren --> Unities abgeben:         
Hallo liebe Gemeinde, ich tüftle schon seit 2 Tagen an einer Schleife und bekomm es einfach nicht hin Mein Problem besteht darin, das ich die Struktur aller Einbauorte & Geräte im Betriebsmittel-Ordner per Markro sperren lassen will. Das eigentliche Sperren funktioniert einwandfrei (auf einen einzelnen Einbauort oder Gerät bezogen), nur meine Schleife in sämtlichen Arten und Variationen will um jeden Preis nicht funktionieren. Die VBA-Hilfe von Aucotec hilft mir da nur sehr sehr dürftig bis gar nicht weiter (an dieser Stelle ist das auch mein Verbesserungsvorschlag für Aucotec: dokumentier und beschreibt alles genauer ) Kann mir jemand von euch weiterhelfen? Zum besseren Verständnis ist meine VBA-Funktion: Public Sub Funktion_Sperren() For i = 1 To Application.Selection(1).Project.EquipmentFolder.Children.Count With Application.Selection(1) .Attributes.ItemByID(902) = 1 'Attribut 902 = Struktur sperren boolscher Operator Call .Store End With Next i MsgBox ("Änderung erfolgreich!") 'Kontrollausgabe End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hochi Mitglied
 
 Beiträge: 113 Registriert: 15.05.2013
|
erstellt am: 13. Aug. 2014 09:31 <-- editieren / zitieren --> Unities abgeben:          Nur für WTE
Hallo, ohne jetzt ein Spezialist zu sein fallen mir zwei Dinge auf: 1. Die Schleifenvariable i wird in der Schleife nicht verwendet. Ich würde vermuten, dass man so etwas wie "Application.Selection(1).Project.EquipmentFolder.Children(i)" verwenden müsste. (Auf Startwert 0 oder 1 achten) 2. Möglicherweise läuft die Schleife dann auch nur über die direkten Kinder. Deren Kinder müsste man durch weitere Schleifen (Rekursion) bearbeiten. Vom Prinzip her entspricht das einer Schleife über Ordner im Dateisystem. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GoetzM Mitglied

 Beiträge: 23 Registriert: 06.10.2010
|
erstellt am: 13. Aug. 2014 11:10 <-- editieren / zitieren --> Unities abgeben:          Nur für WTE
Wenn du nur bestimmte Objekte hast, die du sperren willst(nicht alle haben das Attribut 902), dann kannst du diese auch über Findobjects finden: Application.Selection.Item(1).FindObjects(aucObjDevice, aucSearchHierarchical) Der Aufruf gibt dir alle Geräte unter dem Startknoten zurück, auch die in tieferen Ebenen liegen. Bei diesen setzt du dann die Sperre und machst zum Schluss genau ein Store auf dem obersten Objekt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
WTE Mitglied Informatiker
 Beiträge: 5 Registriert: 13.08.2014
|
erstellt am: 14. Aug. 2014 10:53 <-- editieren / zitieren --> Unities abgeben:         
|
GoetzM Mitglied

 Beiträge: 23 Registriert: 06.10.2010
|
erstellt am: 14. Aug. 2014 11:46 <-- editieren / zitieren --> Unities abgeben:          Nur für WTE
Mach es einfach nach folgendem Schema: Sub GetDevicesAndLock() Dim oObj As ObjectItem Dim oResult As ObjectItem Dim oObjs As ObjectItems Set oObj = Application.Selection(1) Set oObjs = oObj.FindObjects(aucObjDevice) For Each oResult In oObjs oResult.Attributes.ItemByID(aucAttrLockStructure).Value = "1" oResult.Store Next End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
WTE Mitglied Informatiker
 Beiträge: 5 Registriert: 13.08.2014
|
erstellt am: 14. Aug. 2014 16:42 <-- editieren / zitieren --> Unities abgeben:         
|