Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Engineering Base
  Zählschleife in VBA

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
35 Prozent mehr Aufträge - Digitalisierung und Dekarbonisierung bringen Aucotec Rekordergebnisse
Autor(16237) Thema:  Zählschleife in VBA (2047 mal gelesen)
WTE
Mitglied
Informatiker

Sehen Sie sich das Profil von WTE an!   Senden Sie eine Private Message an WTE  Schreiben Sie einen Gästebucheintrag für WTE

Beiträge: 5
Registriert: 13.08.2014

erstellt am: 13. Aug. 2014 08:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von Hochi an!   Senden Sie eine Private Message an Hochi  Schreiben Sie einen Gästebucheintrag für Hochi

Beiträge: 111
Registriert: 15.05.2013

erstellt am: 13. Aug. 2014 09:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für WTE 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von GoetzM an!   Senden Sie eine Private Message an GoetzM  Schreiben Sie einen Gästebucheintrag für GoetzM

Beiträge: 23
Registriert: 06.10.2010

erstellt am: 13. Aug. 2014 11:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für WTE 10 Unities + Antwort hilfreich

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

Sehen Sie sich das Profil von WTE an!   Senden Sie eine Private Message an WTE  Schreiben Sie einen Gästebucheintrag für WTE

Beiträge: 5
Registriert: 13.08.2014

erstellt am: 14. Aug. 2014 10:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke für die schnelle Hilfe. Jedoch hat sich an dem Problem nichts geändert

Hat noch jemand eine Idee wie es funktionieren könnte?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

GoetzM
Mitglied



Sehen Sie sich das Profil von GoetzM an!   Senden Sie eine Private Message an GoetzM  Schreiben Sie einen Gästebucheintrag für GoetzM

Beiträge: 23
Registriert: 06.10.2010

erstellt am: 14. Aug. 2014 11:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für WTE 10 Unities + Antwort hilfreich

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

Sehen Sie sich das Profil von WTE an!   Senden Sie eine Private Message an WTE  Schreiben Sie einen Gästebucheintrag für WTE

Beiträge: 5
Registriert: 13.08.2014

erstellt am: 14. Aug. 2014 16:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Super, es funktioniert     
Danke! 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz