Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  
  Alle Untergeordneten ausblenden

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
[an error occurred while processing this directive] mal gelesen)
Thunja
Mitglied
Projektleiterin / techn. Redakteurin


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

Beiträge: 32
Registriert: 22.08.2017

Inventor 2020 / VBA

erstellt am: 23. Feb. 2021 14:40    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 zusammen,

ich habe ein weiteres Makro geschrieben. Es soll dazu dienen, die Abläufe in unserem Unternehmen zu vereinfachen.

Funktionen dessen sind folgende:
-Alle Arbeitselemente und Ursprungselemente ausblenden
-Alle Untergeordneten ausblenden
-Alphabetische Sortierung des Modellbaums
-Speichern ohne, dass der User bestätigen muss
-Einchecken

Bei der Teilfunktion "Alle Untergeordneten ausblenden" habe ich nun eine Lösung gefunden, jedoch eher durch Glück als durch wissen.
Nun ist die Frage, warum funktioniert die Lösung?

Hier der Ausschnitt für das Ausblenden:

        Dim oTopNode As BrowserNode
        Set oTopNode = Doc.BrowserPanes.Item("Modell").TopNode
        Dim oNode As BrowserNode

        'Hier gehe ich durch die erste Ebene der Nodes
        For Each oNode In oTopNode.BrowserNodes

          If oNode.BrowserNodes.Count > 0 Then

                  Dim i  As Integer
                  For i = 1 To oNode.BrowserNodes.Count
                      oNode.Visible = True
                      oNode.Expanded = False

                      i = i + 1
                  Next
            End If


            If oNode.Expanded = True Then
                oNode.Visible = True
                oNode.Expanded = False
            End If

        Next oNode


Usprünglich hatte ich für die Zeilen
                      oNode.Visible = True
                      oNode.Expanded = False
innerhalb der zweiten For-Schleife folgendes stehen:
                      oNode.BrowserNodes.Item(i).Visible = True
                      oNode.BrowserNodes.Item(i).Expanded = False
Eigentlich macht dieser Code für mich mehr Sinn, da ich IV aktiv sage, welche Unternodes er einklappen soll. Hier bringt er mir allerdings irgendwann eine Fehlermeldung.
Mit den oberen Zeilen funktioniert es, aber ich weiß nicht warum. Ich spreche die Unterknoten in meinem Code doch garnicht an...

Wäre jemand so nett, mir das zu erklären, was hier passiert?
Der Code ist nicht zusammenkopiert oder Ähnliches, das war wohl eher ein Glückstreffer. Wenn ich diesen Code aber freigebe und damit etwas ist, kann ich ja keine Ursache finden, was etwas doof ist.

Vielen Dank im Voraus!

------------------
Grüße, Thunja

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik


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

Beiträge: 1736
Registriert: 15.11.2006

Windows 10 x64, AIP 2021

erstellt am: 23. Feb. 2021 15: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 Nur für Thunja 10 Unities + Antwort hilfreich

Hallo

Ich glaube, das funktioniert nicht. Deine jetzige Funktion klappt nur die oberste Ebene ein. Deine zweite For-Schleife klappt nicht untergeordnete ein, sondern x-mal den obersten Node. Klappt man einen der Nodes hinterher von Hand wieder auf, sieht man dass die Unterknoten alle noch offen stehen.
Woher der Fehler kommt, kann ich dir ohne probieren nicht sagen.

Du musst meiner Meinung rekursiv durch die BrowserNodes gehen und wie in der GUI von unten nach oben zuklappen.

Prober es mal damit:

Code:

Option Explicit

Private Sub CollapseAllNodes()

Dim Doc As Document
Set Doc = ThisApplication.ActiveDocument

Dim oTopNode As BrowserNode
Set oTopNode = Doc.BrowserPanes.Item("Modell").TopNode
Dim oNode As BrowserNode


'Hier gehe ich durch die erste Ebene der Nodes
For Each oNode In oTopNode.BrowserNodes
    If oNode.Visible = True Then
        If oNode.BrowserNodes.Count > 0 Then
            Call CollapseAllSubNodes(oNode)
        End If
        If oNode.Expanded = True Then
            oNode.Expanded = False
        End If
    End If
Next

End Sub

Private Sub CollapseAllSubNodes(ByVal oSubNode As BrowserNode)

Dim oNode As BrowserNode

For Each oNode In oSubNode.BrowserNodes
    If oNode.Visible = True Then
        If oNode.BrowserNodes.Count > 0 Then
            Call CollapseAllSubNodes(oNode)
        End If
        If oNode.Expanded = True Then
            oNode.Expanded = False
        End If
    End If
Next

End Sub


------------------
MfG
Ralf

RKW Solutions GmbH
www.RKW-Solutions.com

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

Thunja
Mitglied
Projektleiterin / techn. Redakteurin


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

Beiträge: 32
Registriert: 22.08.2017

Inventor 2020 / VBA

erstellt am: 23. Feb. 2021 15:43    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 rkauskh,

vielen Dank für deine Antwort.

Ich kann dir nicht erklären, warum mein Code funktioniert, aber, wenn ich einen Knoten auf oberster Ebene nach der Ausführung des Makros aufklappe, alle daruner ebenfalls geschlossen sind.
Ich war ziemlich verblüfft und eigentlich auch deiner Meinung, dass das nicht möglich ist.

Aber um den Code korrekt zu schreiben und auch zu wissen, was er macht, werde ich ihn rekursiv umschreiben.

Vielen Dank trotzdem!

------------------
Grüße, Thunja

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik


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

Beiträge: 1736
Registriert: 15.11.2006

Windows 10 x64, AIP 2021

erstellt am: 23. Feb. 2021 15: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 Thunja 10 Unities + Antwort hilfreich

Hallo

War schon dabei mein Geschreibsel zu editieren. Aber alte Männer sind langsam. 

1.
Es geht glaub ich noch viel einfacher mit dem Einzeiler

Code:
Call ThisApplication.CommandManager.ControlDefinitions.Item("AppBrowserCollapseChildrenCmd").Execute

2.
Beim zweiten Versuch klappt das Einklappen des Browsers doch mit deinem Code. Ich vermute der mehrfache Aufruf ein und denselben Node einzuklappen veranlasst Inventor dazu. Ich denke aber das ist Zufall und darauf würde ich mich nicht verlassen.

------------------
MfG
Ralf

RKW Solutions GmbH
www.RKW-Solutions.com

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

Thunja
Mitglied
Projektleiterin / techn. Redakteurin


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

Beiträge: 32
Registriert: 22.08.2017

Inventor 2020 / VBA

erstellt am: 24. Feb. 2021 07:05    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

Guten Morgen Ralf,

Vorschlag 1 hatte ich bereits versucht, da ich zu Anfang über die internen Befehle ging. Hier wird keine Fehlermeldung ausgegeben, sondern das Programm läuft einfach durch.
In erster Linie zeigt dieser Befehl keine Wirkung.

Allerdings fiel mir grad noch ein, dass das eventuell mit der veralteten Ansicht zusammenhängen könnte. Ich habe den refresh-Befehl hinzugefügt und dann sieht auch der User das Ergebnis.

Vielen Dank dafür, dass du mir den Befehl nochmals vor Augen geführt hast. 
Jetzt funktioniert es einwandfrei.

------------------
Grüße, Kristina

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)2021 CAD.de | Impressum | Datenschutz