Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema ToggleButton
BildScreenshot zu ToggleButton ToggleButton-Seite mit Beispielarbeitsmappe aufrufen

Code für ToggleButton von Nepumuk


Betrifft: Code für ToggleButton von Nepumuk von: Frank
Geschrieben am: 06.05.2017 22:18:20

Guten Abend allerseits,

folgenden Code habe ich von Nepumuk bekommen.

Private Sub ToggleButton1_Click()
    
    Dim objCell As Range
    
    If ToggleButton1.Value Then
        ToggleButton1.Caption = "128er Feld"
    Else
        ToggleButton1.Caption = "256er Feld"
    End If
    
    For Each objCell In Range("CZ4:DB80")
        
        Select Case objCell.Row Mod 10
            Case 4 To 6, 9: objCell.EntireRow.Hidden = ToggleButton1.Value
        End Select
        
    Next
End Sub
Bei erster Betrachtung sah es so aus,als wenn es passen würde.Nun musste ich feststellen,das ab Zeile 9 immer eine Zeile zuviel zu sehen ist. Es müssten eigentlich noch jeweils die Zeilen 10,20,30 usw auch noch ausgeblendet werden,dann passt es aber nicht mehr mit jeder 10. Zeile.

In der Beispieltabelle habe ich jeweils ein Beispiel,wie es nach betätigen des Buttons aussieht und wie es aussehen soll.Ausserdem ist darin nur ein achtel der Tatsächlichen Zellen drin. Die letzte Zeile ist 639 bzw 640.

https://www.herber.de/bbs/user/113374.xls

Lg Frank

  

Betrifft: AW: Code für ToggleButton von Nepumuk von: Frank
Geschrieben am: 07.05.2017 00:14:26

Nachtrag: konnte das Problem selber lösen.

Case 4 To 6, 8 To 9: objCell.EntireRow.Hidden = ToggleButton1.Value
Zeile 8 hinzugefügt und es passt,zumindest im Moment.

Lg Frank


  

Betrifft: Problem gelöst,aber wie weiter machen von: Frank
Geschrieben am: 07.05.2017 00:50:05

Hallo,

nachdem ich nun das Problem mit dem ToogleButton gelöst habe,möchte ich nun weiter machen.

Private Sub ToggleButton1_Click()
     
     Dim objCell As Range
     
     If ToggleButton1.Value Then
         ToggleButton1.Caption = "128er Feld"
     Else
         ToggleButton1.Caption = "256er Feld"
     End If
     
     For Each objCell In Range("DP4:DP639")
         
         Select Case objCell.Row Mod 10
             Case 4 To 6, 8 To 9: objCell.EntireRow.Hidden = ToggleButton1.Value
         End Select
         
     Next
 End Sub
Dieser Code steht ja nu direkt im entsprechenden Tabellenblatt(TurnierBoard). Ich möchte nun ein neues Modul einfügen und mit der Zeile " If ToggleButton1.Value Then" weiter machen.

Was soviel heisst wie: Wenn ToogleButton gedrückt,dann Rahmen in den Zellen ..... schwarz
(so zum Beispiel :
With Range("DN17").Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = 1
    End With)
Wie kann ich aus einem Modul,direkt diese Zeile ansprechen?

Lg Frank


  

Betrifft: AW: Problem gelöst,aber wie weiter machen von: Hajo_Zi
Geschrieben am: 07.05.2017 09:46:55

die spricht Du doch Direkt an
With Range("DN17")

Warum Modul?

GrußformelHomepage


  

Betrifft: AW: Problem gelöst,aber wie weiter machen von: Frank
Geschrieben am: 07.05.2017 10:17:19

Moin Hajo,

ich hab gedacht wegen der Übersichtlichkeit. Wo gehört es denn am besten hin?Und wie formuliere ich das richtig?Hab es jetzt mal direkt mit in die Prozedur gepackt

Option Explicit

Private Sub ToggleButton1_Click()
    
    Dim objCell As Range
    
    If ToggleButton1.Value Then
        ToggleButton1.Caption = "128er Feld"
    Else
        ToggleButton1.Caption = "256er Feld"
    End If
    
    For Each objCell In Range("DP4:DP639")
        
        Select Case objCell.Row Mod 10
            Case 4 To 6, 8 To 9: objCell.EntireRow.Hidden = ToggleButton1.Value
        End Select
    Next
         
    If ToggleButton1.Value Then
        With Range("DN17").Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .Weight = xlMedium
            .ColorIndex = 1
        End With
    End If
  
End Sub
Ist das so in Ordnung oder kann man es noch besser formulieren?

Lg Frank


  

Betrifft: AW: Problem gelöst,aber wie weiter machen von: Hajo_Zi
Geschrieben am: 07.05.2017 10:20:22

ich hätte es an eine andere Stelle geschrieben.
Ich baue keine Datei nach. Die Zeit hat schon jemand investiert.

Ein Nachbau sieht meist anders aus als das Original. Darum sollte das Original verlinkt werden.

Option Explicit

Private Sub ToggleButton1_Click()
    
    Dim objCell As Range
    
    If ToggleButton1.Value Then
        ToggleButton1.Caption = "128er Feld"
        With Range("DN17").Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .Weight = xlMedium
            .ColorIndex = 1
        End With
    Else
        ToggleButton1.Caption = "256er Feld"
    End If
    
    For Each objCell In Range("DP4:DP639")
        
        Select Case objCell.Row Mod 10
            Case 4 To 6, 8 To 9: objCell.EntireRow.Hidden = ToggleButton1.Value
        End Select
    Next
End Sub
Gruß Hajo


  

Betrifft: AW: Problem gelöst,aber wie weiter machen von: Frank
Geschrieben am: 07.05.2017 11:27:12

Hallo Hajo,

hab deine Antwort leider vorhin erst gesehen,sorry.Hab deine Lösung jedenfalls mit rein genommen(zwar auskommentiert),man weiß ja nie wann man das mal gebrauchen kann.

Lg Frank


  

Betrifft: AW: Code für ToggleButton von Nepumuk von: Gerd L
Geschrieben am: 07.05.2017 10:00:24

Hallo Frank,

meinst du so?

Sub teste()

    If Worksheets("Tabelle1").ToggleButton1 Then
        
        With Worksheets("Tabelle1").Range("DN17").Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .Weight = xlMedium
            .ColorIndex = 1
        End With
    
    End If

End Sub
Gruß Gerd


  

Betrifft: AW: Code für ToggleButton von Nepumuk von: Frank
Geschrieben am: 07.05.2017 10:27:49

Guten Morgen Gerd,

genauso hab ich mir das vorgestellt.Nun soll dieses Makro ja direkt beim Betätigen des Buttons angestossen werden,ich weiß das geht geht irgendwie mit der " Call-Anweisung",nur an welche Stelle gehört die Anweisung.

Ich könnte mir vorstellen,das es für euch Profis wenig Sinn macht,die weitere Programmierung in ein separates Modul zu packen,ihr würdet sehr wahrscheinlich direkt weiter in der Prozedur vom ToggleButton programmieren.

Lg Frank


  

Betrifft: AW: Code für ToggleButton von Nepumuk von: Werner
Geschrieben am: 07.05.2017 10:47:27

Hallo Frank,

hast du dir die zweite Antwort von Hajo eigentlich nicht angeschaut.

Wenn dein ToggleButton den Namen ToggleButton1 hat und auf Tabellenblatt 1 ist, dann den kompletten Code von Hajo einfach ins Tabellenblatt 1 kopieren.

Rechtsklick aur den Blattreiter - Code anzeigen - Code rechts ins Codefenster kopieren.

Gruß Werner


  

Betrifft: AW: Code für ToggleButton von Nepumuk von: Frank
Geschrieben am: 07.05.2017 11:03:09

Hallo Werner,

ups,die Antwort ist bei mir irgendwie durch gerutscht,hab sie auf deinen Hinweis jetzt erst gesehen.

Funktioniert natürlich auch aber für mich als Anfänger gefällt mir die Lösung von Gerd besser.

Hab das mit der "Call-Anweisung" auch hinbekommen

Private Sub ToggleButton1_Click()

    Dim objCell As Range

    If ToggleButton1.Value Then
        ToggleButton1.Caption = "128er Feld"
    Else
        ToggleButton1.Caption = "256er Feld"
    End If

    For Each objCell In Range("DP4:DP639")

        Select Case objCell.Row Mod 10
            Case 4 To 6, 8 To 9: objCell.EntireRow.Hidden = ToggleButton1.Value
        End Select
    Next

Call teste
End Sub
Sub teste()
 
     If Worksheets("Turnier-Board").ToggleButton1 Then
         
         With Worksheets("Turnier-Board").Range("DN17").Borders(xlEdgeLeft)
             .LineStyle = xlContinuous
             .Weight = xlMedium
             .ColorIndex = 1
         End With
     
     End If
 
 End Sub
So kann ich bei Bedarf die Call-Anweisung einfach auskommentieren.

Lg Frank


  

Betrifft: Gerne u. Danke für die Rückmeldung von: Werner
Geschrieben am: 07.05.2017 11:21:03

Hallo Frank,

aber du solltest eine Rückmeldung an Hajo nicht vergessen.

Gruß Werner


  

Betrifft: AW: Gerne u. Danke für die Rückmeldung von: Frank
Geschrieben am: 07.05.2017 14:41:13

Habe mir jetzt mal was gebastelt,was auch soweit funktioniert.

Sub teste()
 
     If Worksheets("Turnier-Board").ToggleButton1 Then
     
'  "Überflüssige Rahmen werden schwarz gefärbt
         With Worksheets("Turnier-Board").Range("DN17").Borders(xlEdgeLeft)  ' "Rahmen links"
             .LineStyle = xlContinuous
             .Weight = xlMedium
             .ColorIndex = 1
         End With
         With Worksheets("Turnier-Board").Range("DT17").Borders(xlEdgeRight)  ' "Rahmen rechts"
             .LineStyle = xlContinuous
             .Weight = xlMedium
             .ColorIndex = 1
         End With
'         With Worksheets("Turnier-Board").Range("DN20").Borders(xlEdgeTop)  ' "Rahmen oben"
'             .LineStyle = xlContinuous
'             .Weight = xlMedium
'             .ColorIndex = 1
'         End With
         With Worksheets("Turnier-Board").Range("DN17,DT17").Borders(xlEdgeBottom)  ' "Rahmen  _
unten"
             .LineStyle = xlContinuous
             .Weight = xlMedium
             .ColorIndex = 1
         End With
         
'  "Neue Rahmen werden erstellt"
         With Worksheets("Turnier-Board").Range("DN12").Borders(xlEdgeLeft)  ' "Rahmen links"
             .LineStyle = xlContinuous
             .Weight = xlMedium
             .ColorIndex = 2
         End With
         With Worksheets("Turnier-Board").Range("DT12").Borders(xlEdgeRight)  ' "Rahmen rechts"
             .LineStyle = xlContinuous
             .Weight = xlMedium
             .ColorIndex = 2
         End With
     
     End If
 End Sub
Nun habe ich festgestellt,wenn ich den ToggleBotton erneut drücke,also quasi wieder zurück schalte,fehlen die Rahmen bei DN17,DT17 "oben" und die Rahmen bei DN12 "links" und DT12 "rechts bleiben erhalten.

Für mich bis hierher sogar nachvollziehbar,da die Else-Anweisung fehlt. Wie bewerkstellige ich das nun,dass ich den Zustand bekomme,bevor der Button gedrückt wurde? Also im Zustand "falsch"

Hab die Datei mal hochgeladen:
https://www.herber.de/bbs/user/113380.xls

Lg Frank


Beiträge aus den Excel-Beispielen zum Thema "Code für ToggleButton von Nepumuk"