Warum funktioniert eine Case-Struktur nicht ?
#1
Hallo zusammen,

ich habe einen Fehler in einer Case-Struktur. Wer hilft mir?

Select Case s                     'Tabellenbereiche und Formularschaltflächen ausblenden
    Case Is <= 12:              ThisWorkbook.Sheets("Übersicht").Range("1:46").EntireRow.Hidden = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 5").Visible = True
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 7").Visible = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 14").Visible = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 15").Visible = False
    Case Is > 12, Is <= 24:  ThisWorkbook.Sheets("Übersicht").Range("1:80").EntireRow.Hidden = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 5").Visible = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 7").Visible = True
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 14").Visible = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 15").Visible = False
    Case Is > 24, Is <= 36:  ThisWorkbook.Sheets("Übersicht").Range("1:118").EntireRow.Hidden = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 5").Visible = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 7").Visible = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 14").Visible = True
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 15").Visible = False
    Case Is > 36, Is <= 48:  ThisWorkbook.Sheets("Übersicht").Range("1:156").EntireRow.Hidden = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 5").Visible = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 7").Visible = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 14").Visible = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 15").Visible = False
    End Select

Die Variable s ist 25. Trotzdem lande ich immer in Case Is > 12, <= 24: Wo ist der Denkfehler?

Gruß Michael
Top
#2
Hallo,

logisch!


Code:
Select Case s                     [color=#33cc99]'Tabellenbereiche und Formularschaltflächen ausblenden[/color]
    Case Is <= 12:              ThisWorkbook.Sheets("Übersicht").Range("1:46").EntireRow.Hidden = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 5").Visible = True
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 7").Visible = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 14").Visible = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 15").Visible = False
    CaseIs <= 24:  ThisWorkbook.Sheets("Übersicht").Range("1:80").EntireRow.Hidden = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 5").Visible = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 7").Visible = True
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 14").Visible = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 15").Visible = False
    Case  Is <= 36:  ThisWorkbook.Sheets("Übersicht").Range("1:118").EntireRow.Hidden = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 5").Visible = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 7").Visible = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 14").Visible = True
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 15").Visible = False
    Case Is <= 48:  ThisWorkbook.Sheets("Übersicht").Range("1:156").EntireRow.Hidden = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 5").Visible = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 7").Visible = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 14").Visible = False
                                        ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 15").Visible = False
    End Select
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
[-] Folgende(r) 1 Nutzer sagt Danke an BoskoBiati für diesen Beitrag:
  • Icepic
Top
#3
Danke Edgar,

manchmal bleibt man anscheinend in einen falschen Gedankengang stecken.

Gruß Michael
Top
#4
Hi,

(29.11.2016, 09:54)BoskoBiati schrieb: logisch!

Wenn ich einzelne Buttons lösche, stimmen die Nummern ja nicht mehr oder sind nicht fortlaufend.
Das sind ja Formular-Steuerelemente, wie können dann diese Buttons umbenannt werden?
Wenn ich draufklicke, bekomme ich sie im VBA-Editor nicht angezeigt.

(ActiveX-) CommandButtons kann ich bei Rechtsklick mit "Eigenschaften" bearbeiten.
Aber wie spreche ich die CommandButtons an zum Ein- und Ausblenden?

   
Private Sub Ausblenden()
   Dim s As String
   
   'Mit diesem Code werden Tabellen, Bereiche und Buttons ausgeblendet, wenn Bedingung erfüllt ist. 
   s = VBA.Environ("Username")
'   MsgBox s 
   
   Select Case s                     'Tabellen, Bereiche und Formularschaltflächen ausblenden 
   Case Is = "Rabe":
      ThisWorkbook.Sheets("Übersicht").Visible = True
      ThisWorkbook.Sheets("Übersicht").Range("1:46").EntireRow.Hidden = False
'      ThisWorkbook.Sheets("Übersicht").Range("48:60").EntireRow.Hidden = True 
      ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 1").Visible = True
'      ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 2").Visible = True         '2 - 10 gibt es nicht 
      ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 11").Visible = True
      ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 13").Visible = True
      ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 14").Visible = True
      ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 15").Visible = True
   Case Else
      ThisWorkbook.Sheets("Übersicht").Visible = False
'      ThisWorkbook.Sheets("Übersicht").Range("48:50").EntireRow.Hidden = True 
'      ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 1").Visible = False 
'      ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 14").Visible = False 
'      ThisWorkbook.Sheets("Übersicht").DrawingObjects("Button 15").Visible = False 
   End Select
End Sub
Top
#5
Code:
with ThisWorkbook.Sheets("Übersicht")
   .DrawingObjects("Button 5").Visible =( s-1)\12=0
   .DrawingObjects("Button 7").Visible =(s-1)\12=1
   .DrawingObjects("Button 14").Visible = (s-1)\12=2
   .DrawingObjects("Button 15").Visible =(s-1)\12=3

   .rows(1).resize(choose((s-1)\12+1,46,80,118,156)).hidden=false
End with
Top
#6
Hallo Ralf,

ich weiß zwar nicht worauf Du hinaus wolltest, mein logisch bezog sich darauf, dass case>12 abgearbeitet wird, der Rest (Is<=24) wird ignoriert. Also ist alles, was >12 ist damit erschlagen!
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#7
Hallo Edgar,

(29.11.2016, 19:51)BoskoBiati schrieb: ich weiß zwar nicht worauf Du hinaus wolltest, mein logisch bezog sich darauf, dass case>12 abgearbeitet wird, der Rest (Is<=24) wird ignoriert. Also ist alles, was >12 ist damit erschlagen!

ja, so weit ist mir das klar gewesen.

Dabei ist mir eingefallen, daß ich das auch für eines meiner Projekte verwenden könnte, also Anwendung auf ein anderes Sheet.
Da habe ich mir dann zum Ausprobieren ein Beispielsheet gebastelt, in der ich mehrere Formular-Buttons und CommandButtons eingefügt und ein paar wieder gelöscht habe.
Die habe ich per VBA aus- und eingeblendet und das auch mit dem Sheet gemacht.

Nun heißen die Formular-Buttons 1, 11, 13, 14, 15 und es gibt einen CommandButton.
Frage 2 war: wie kann ich den CommandButton ansprechen zum aus- und wieder einblenden?

In der Liste der Formular-Buttons sind ja Lücken. Wenn ich die über eine Schleife ansprechen will, sollten die Lücken weg sein. Beim Kopieren der Buttons ändern sich die Text-Nummern ("Schaltfläche 11", ...) nicht, beim Ändern der Texte ändern sich die Nummern der Buttons nicht. Ich sehe nirgends die Nummer des Buttons. Wenn ich im Entwurfsmodus auf einen CommandButton doppelklicke, kann ich im VBA-Editor alles ändern, beim Formularbutton geht das nicht.
Frage 1 war: Wie kann ich sehen, welcher Button welche Nummer hat und wie kann ich die Nummern ändern?
Top
#8
Hallo Ralf,

Formularbuttons musst Du über die Shapes-Eigenschaft ansprechen

Code:
Sub prcX()
   Dim lngC As Long
   Dim vntA As Variant
   Dim shO As Shape
   'Array mit der Nummerierung der Buttons
   vntA = Array("1", "2", "3", "5")
  
   'Schleife über die Namen
   For Each shO In ActiveSheet.Shapes
      MsgBox shO.Name
   Next shO
  
   For lngC = 0 To UBound(vntA)
      'Namen der Buttons
      MsgBox ActiveSheet.Shapes("Schaltfläche " & vntA(lngC)).Name
      'Bezeichnung ändern
      ActiveSheet.Shapes("Schaltfläche " & vntA(lngC)).TextFrame.Characters.Text = "Hallo " & vntA(lngC)
   Next lngC

End Sub
Gruß Stefan
Win 10 / Office 2016
Top
#9
Hi stefan,

(01.12.2016, 14:19)Steffl schrieb: Formularbuttons musst Du über die Shapes-Eigenschaft ansprechen

so, ich habe nun rumprobiert, plötzlich sind meine Buttons nicht mehr 11, 13, 14 und 15, sondern 3-6. Es fehlt aber weiterhin der Button 2.

Jetzt habe ich eine Beispieltabelle
.xlsb   Buttons ausblenden.xlsb (Größe: 29,71 KB / Downloads: 5) erstellt:
den Button 6, der eigentlich 5 heißen sollte, nach rechts kopiert.
Wenn ich das Makro "Buttons_zeigen" starte, sehe ich, daß der nun "Button 9" heißt, es steht natürlich weiterhin "Schaltfläche 6" drin.

Wenn ich das "Ausblenden"-Makro starte, werden die (wie oben benannten) Buttons (1, 3-6, 9) aus-/eingeblendet.

Wie bekomme ich es jetzt aber hin, daß ich die Buttons in der Soll-Nummer 1-6 bekomme, anstatt 1, 3-6, 9.
Mit Deinem Makro wird zwar der angezeigte Text in den Buttons geändert, aber nicht die Button-Nummerierung an sich.

Wie blende ich einen der CommandButtons aus/ein?
Top
#10
Hallo Rabe

ich habe ein nettes Advents oder Weihnachtsgeschenk für dich.  Deine Beispieldatei zurück, mit Lösung 

Du kannst mit den neuen Makros die Button Objekte auflisten, und alle mit dem 2. Makro umbenennen.
Das gilt aber nur für normale Button, es lappt nicht mit Aktiven Steuerelementen!!
Ich bevorzuge die alten Button, weil sie mit VBA leichter zu programmieren sind!!

mfg  Gast 123


Angehängte Dateien
.xlsm   Buttons ausblenden.xlsm (Größe: 27,75 KB / Downloads: 6)
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste