Änderung der Eigenschaften von Rahmen haben keine Auswirkung

  • Excel

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von WhitePage.

    Änderung der Eigenschaften von Rahmen haben keine Auswirkung

    Hallo zusammen,

    ich habe ein Problem, bei dem ich vollkommen ratlos bin.
    Und zwar habe ich in einer UserForm einen Rahmen mit Labels, den ich nur bei bestimmten Bedingungen anzeigen möchte und je nachdem welche Bedingung erfüllt wurde die Caption ändern.

    Visual Basic-Quellcode

    1. If Sheets(1).Cells(i, 17) <> "" Then
    2. Me.frTeil.Visible = True
    3. Me.frTeil.Caption = "Druck 1 [bar]"
    4. L_Vmax = Sheets(1).Cells(i, 22)
    5. L_KD_VA = Format(Sheets(1).Cells(i, 17), "#.0")
    6. L_KD_HA = Format(Sheets(1).Cells(i, 18), "#.0")
    7. ElseIf Sheets(1).Cells(i, 19) <> "" Then
    8. Me.frTeil.Visible = True
    9. Me.frTeil.Caption = "Druck 2 [bar]"
    10. L_KD_VA = Format(Sheets(1).Cells(i, 19), "#.0")
    11. L_KD_HA = Format(Sheets(1).Cells(i, 20), "#.0")
    12. L_Vmax = "Vmax"
    13. Else
    14. Me.frTeil.Visible = False
    15. End If


    Allerdings hat jetzt alles was ich mit frTeil mache keine sichtbaren Auswirkungen. So bleibt er zum Beispiel unsichtbar, selbst wenn die Abfrage der Visible Eigenschaft im Direktfenster "Wahr" ergibt.
    genauso verhält es sich z.B. mit der Caption. Ich habe testhalber mal den Rahmen Standardmäßig sichbar eingestellt und dann beobachtet, ob sich die Benennung ändert. Hier das selbe: In der Userform keine Änderung, im Direktfenster ein neuer Name...

    Die Labels, die in dem Rahmen enthalten sind, verändern ihre Werte allerdings auch sichtbar in der UserForm.

    Ich bin da gerade etwas ratlos und bitte um Erleuchtung.

    Gruß
    Hi,
    Das habe ich bereits gemacht, bzw. geprüft. Der richtige If-Zweig wird abgearbeitet, die richtigen Elemente angesprochen und die entsprechenden Werte werden auch geändert.

    Ich kann wie gesagt die Werte auch über Direktfenster, oder Msgbox abfragen und bekomme das, was ich erwartet habe. Lediglich für die Anzeige der Userform hat das keine Auswirkung...

    WhitePage schrieb:

    Jetzt weiß ich gar nicht mehr, was du eigentlich meinst.


    Ok dann muss ich glaub ich nochmal versuchen mich klarer auszudrücken:

    Ich habe mehrere Labels auf einer Userform, die Daten aus einer Tabelle anzeigen sollen. Bei enem Großteil der möglichen Datenreihen gibt es für ein paar der Labels allerdings keine Daten. Deshalb habe ich einen Rahmen erstellt, diese Labels da rein gepackt und wollte den Rahmen dann nur dann einblenden, wenn Daten vorhanden sind, bzw. die Caption anpassen, je nachdem welche Daten vorhanden sind (Das wird in der geposteten If-Schleife abgearbeitet und funktioniert).

    Meine Idee war, dass ich mir Tipparbeit spare, weil ich nicht jedes Label einzeln ein- und ausblenden muss sondern dass über den Rahmen lösen kann. Außerdem sieht das aufgeräumter aus.
    Leider zeigt sich der Rahmen völlig unbeeindruckt dafür, dass ich über den Code seine .visible, bzw .caption ändere. Das interessante ist, dass eine Abfrage der Werte per msgbox oder print Befehl im Direktfenster die Änderung der Werte bestätigt, der Rahmen und sein Inhalt aber weder sichtbar werden, noch (falls visible = true als Startwert eingestellt ist) die Anzeige der Caption geändert wird.

    Ich hoffe das war jetzt verständlicher.

    Gruß Tommel

    WhitePage schrieb:

    Was meinst du mit Rahmen? Eine Groupbox?




    Also bei mir heißt des Rahmen. Aber vermutlich meinen wir das Gleiche.

    Die Labels sind auf jeden Fall damit gruppiert. Wenn ich im Editor eines der Labels anwähle, dann wird die Umrandung mit gehighlightet, bzw. bei Verschieben werden alle Labels mitverschoben.
    Kann es sein, dass der Rahmen gar nicht die Funktionalität besitzt, die du ihm gedenkst?
    Gibt es da keine Alternativen?

    @Tommel
    Ich habe jetzt bei MSND folgenden Code gesehen: support.microsoft.com/kb/829070/de

    Visual Basic-Quellcode

    1. Private Sub Frame1_Click()
    2. Dim Ctrl As Control
    3. For Each Ctrl In Frame1.Controls
    4. Ctrl.Enabled = Not Ctrl.Enabled
    5. Next
    6. End Sub


    Probier es mal auch, anstatt .Visible zu setzen, einfach alle Labels in der Schleife anzusprechen. Vielleicht kann der Rahmen es einfach nicht...

    Hi,
    ich hab mir deinen Link mal angeschaut. (Der is übrigens Klasse - ne ganze Menge nützliche Codeschnipsel!)
    Aber ich befürchte hier hilft mir das nicht weiter.

    Ich hab das gleiche grad eben nochmal testhalber in einer separaten Mappe nachgebaut und da funktioniert es. Der Frame wird aus und eingeblendet und ändert seine Caption. Allerdings muss er gelegentlich mehrmals dazu aufgefordert werden. Ich habe in der Testmappe auf einen normalen CommandButton einen Code gestellt, der den visible Wert abfragt und den jeweils anderen einstellt. Wenn ich diesen Knopf zu schnell hintereinander drücke, dann geschieht gelegentlich gar nichts.

    So ähnlich ist es mit der Caption. Ich habe auf das Frame.Click Event den Code:

    VB.NET-Quellcode

    1. frame1.Caption = Now()

    gelegt und ab und zu muss man den Frame 2 Mal anklicken, bis der aktualisierte Timestamp eingetragen wird. Aber das Steuerelement an sich kann alles das machen, was ich will. Es tut es in meinem Fall nur nicht!

    Für den Fall, dass ich durch das Kürzen des Codes am Anfang Informationen gekürzt habe hier nochmal unverändert:
    Das Steuerelement um das es geht ist "frTeil"

    VB.NET-Quellcode

    1. Private Sub Box_Varianten_Change()
    2. For i = 2 To lz_Fzg
    3. ''''''''''''''''''''''''''''Passenden Eintrag suchen'''''''''''''''''''''''''''''''''''''''''''''''''
    4. If Sheets("Fahrzeugzuordnung").Cells(i, 1) = Hersteller And _
    5. Sheets("Fahrzeugzuordnung").Cells(i, 2) = Baureihe And _
    6. Sheets("Fahrzeugzuordnung").Cells(i, 3) = Modell And _
    7. Sheets("Fahrzeugzuordnung").Cells(i, 4) = MJ And _
    8. Sheets("Fahrzeugzuordnung").Cells(i, 14) = Box_Varianten.Value Then
    9. '''''''''''''''''''''''''''Informationen zu passendem Eintrag sammeln/bzw. eintragen'''''''''''''''''
    10. RaReNrVA = Sheets("Fahrzeugzuordnung").Cells(i, 12)
    11. RaReNrHA = Sheets("Fahrzeugzuordnung").Cells(i, 13)
    12. L_FD_VA = Format(Sheets("Fahrzeugzuordnung").Cells(i, 15), "#.0")
    13. L_FD_HA = Format(Sheets("Fahrzeugzuordnung").Cells(i, 16), "#.0")
    14. L_Schnee = Sheets("Fahrzeugzuordnung").Cells(i, 21)
    15. If Sheets("Fahrzeugzuordnung").Cells(i, 17) <> "" Then
    16. UF_RadReifen.frTeil.Visible = True
    17. UF_RadReifen.frTeil.Caption = "Komfortdruck [bar]"
    18. L_Vmax = Sheets("Fahrzeugzuordnung").Cells(i, 22)
    19. L_KD_VA = Format(Sheets("Fahrzeugzuordnung").Cells(i, 17), "#.0")
    20. L_KD_HA = Format(Sheets("Fahrzeugzuordnung").Cells(i, 18), "#.0")
    21. ElseIf Sheets("Fahrzeugzuordnung").Cells(i, 19) <> "" Then
    22. UF_RadReifen.frTeil.Visible = True
    23. UF_RadReifen.frTeil.Caption = "Teilbeladungsdruck [bar]"
    24. L_KD_VA = Format(Sheets("Fahrzeugzuordnung").Cells(i, 19), "#.0")
    25. L_KD_HA = Format(Sheets("Fahrzeugzuordnung").Cells(i, 20), "#.0")
    26. L_Vmax = "Vmax"
    27. Else
    28. UF_RadReifen.frTeil.Visible = False
    29. End If
    30. Exit For
    31. End If
    32. Next
    33. End Sub


    Gruß
    Dürfte doch eigentlich nicht passieren oder? Ich habe ja das Exit For hinter der Änderung stehen.
    Ansonsten gute Idee. Hatte mir im ersten Moment schon an den Kopf gelangt...

    Aber ich habe jetzt tatsächlich eine Lösung gefunden, die ich allerdings nicht verstehe!
    ich habe folgendes geändert:

    VB.NET-Quellcode

    1. Statt
    2. UF_RadReifen.frTeil.Visible = True
    3. jetzt
    4. frTeil.Visible = True


    Ist mir zwar nicht klar, warum die vollständigere Deklaration die Anzeige nicht ändert, aber hauptsache es funktioniert.
    Hat mich trotzdem ganz schön Zeit und Nerven gekostet.

    Vielen Dank für die Hilfe und falls mir jemand erklären kann warum das so funktioniert und anders nicht, wäre ich wirklich interessiert.

    Gruß Tommel

    Tommel schrieb:

    Ich habe ja das Exit For hinter der Änderung stehen.

    Stimmt, sorry, habe übersehen :whistling:

    Tommel schrieb:

    VB.NET-Quellcode

    1. UF_RadReifen.frTeil.Visible = True

    Was soll es eigentlich darstellen? Was ist in dem Fall UF_RadReifen?
    Wenn du den eigenen Rahmen ansprichst, sollte es doch Me.frTeil.Visible=True heißen, oder? Vielleicht wurde damit einfach ein neuer Rahmen instanziert... Das würde es dann erklären.
    Ich glaube das ist die Antwort! Zumindest fast. UF_RadReifen ist die Userform, in der frTeil liegt. Da ich die Userform aber schon als Instanz öffne könnte es ja sein, dass er nicht weiß, welche Instanz angesprochen wird und somit in dieser aktuell aktiven Instanz keine Änderung sichtbar wird auch wenn der debug print die Änderung bestätigt.
    Me. sollte hier dann natürlich wieder funktionieren!

    Vielen Dank für die Erleuchtung! :thumbsup:

    Wenn ich gewusst hätte, dass das relevant ist, hätte ich das gleich mitgeschrieben... Allerdings... dann hätte ich das Problem ja schon gekannt und hätte gar nicht fragen brauchen :D