1.1k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo zusammen,

ich habe heute eine Frage über Spinbuttos und wie man damit Zeilen ein und ausblendet heute mal nicht einfügen und löschen. :-)

folgendes Szenario:

-fester Bereich: Zeile 1 - 7

-ein/auszublendender Bereich: Zeilen 8 - 21

-Zeilen 8 - 21 sind ausgeblendet

SpinDown: Zeilen anzeigen bei jedem neuen klick

8-9 Anfang 1. Klick
10-11 2. Klick
12-13 3. Klick
14-15 4. Klick
16-17 5. Klick
18-19 6. Klick
20-21 Ende 7. Klick

SpinUp: Zeilen ausblenden bei jedem neuen klick

8-9 Ende 7. Klick
10-11 6. Klick
12-13 5. Klick
14-15 4. Klick
16-17 3. Klick
18-19 2. Klick
20-21 Anfang 1. Klick

Es werden also immer 2 Zeilen ein/ausgeblendet. Ich fange also mit dem einblenden bei 8-9 an und höre bei 20-21 auf, beim ausblenden soll es mit 20-21 anfangen und mit 8-9 wieder aufhören.
Ich habe zwar den ein oder anderen Codeschnipsel im Netzt gefunden nur funktionierten die leider nicht so wie ich es benötige.

Vielleicht hat jemand von euch ein Plan wie man das in VBA umsetzem kann.

Hab mal meine Testdatei angehangen

https://www.dropbox.com/s/htx68cimdvgl82z/spinb1.xlsm?dl=0

Gruß
energun222

P.S.

schönen Ostermontag noch.

17 Antworten

+1 Punkt
Beantwortet von
Hallo Jana,

keine Ahnung wo du diesen SpinButton her hast, aber es ist der falsche.

Nutze einen AktiveX-SpinButton, der die Eigenschaften Min und Max unterstützt.

Setze Max auf -8 und Min auf -22 sowie SmallChange auf 2 und Value ebenfalls auf -8 (wenn zu Beginn die Zeilen ausgeblendet sind) bzw. auf -22 (wenn zu Beginn die Zeilen eingeblendet sind) oder eine gerade Zeilennummer dazwischen (wenn zu Beginn diese sowie alle nachfolgenden Zeilen ausgeblendet sind)

Drücke nun Alt+F11 und gib in dem Tabellenmodul, das deinen Spinbutton enthält den folgenden Code ein:
Private Sub SpinButton2_SpinDown()
Rows(Abs(SpinButton2.Value) - 2 & ":" & Abs(SpinButton2.Value) - 1).Hidden = False
End Sub

Private Sub SpinButton2_SpinUp()
Rows(Abs(SpinButton2.Value) & ":" & Abs(SpinButton2.Value) + 1).Hidden = True
End Sub
Der Name des Spinbuttons ist dabei anzupassen.

Zum Testen musst du evtl. noch den Entwurfsmodus z.B. per Klick auf das Symbol mit dem Zeichendreieck beenden.

Hab das Ganze zur Veranschaulichung ebenfalls mal hochgeladen. Leider kann ich mit meiner Excel-Version nicht als xlsm speichern. Das müsstest du dann selbst machen.

Gruß Mr. K.
0 Punkte
Beantwortet von
Hallo Mr. K.

bin zwar nicht Jana ;-) aber tut ja nichts zur Sache. Super Antwort und funktionierte auf Anhieb. Ich Dank Dir!

Gruß
energun222
0 Punkte
Beantwortet von
Dachte den Namen hätt' ich mal irgendwo gelesen. Sorry. Danke für die Rückantwort.
Freut mich, dass es klappt.

Mr. K.
0 Punkte
Beantwortet von vernichter Mitglied (261 Punkte)

Hallo zusammen,

ich möchte dieses doch etwas älter Thema noch einmal aufwärmen. Die obige Antwot funktioniert noch bis heute doch wollte ich es etwas abändern und das ganze in eine Userform packen. Ich sitze jetzt bestimmt 2 Wochen daran und hab da sicher ein Verständniss Problem.

Ich starte die Userform Spin1 mit dem klick in die Zelle Anzahl LKW wenn der Wert in Zelle A9 ist >= 3 dann funktioniert der SpinButton1  ( er zählt von 3 aufwährts bis 10 und auch die Zeilen werden eingeblendet.)

Ist der Wert 10 und man verlässt die Userform und startet sie wieder und will die Zeilen ausblenden hackt es kurz. Man muss dann hoch und runter drücken und dann geht es komischerweise.

Das ganze ist schlecht zu erklären denn wenn ich einen solchen SpinButton in das Sheet einbaue sind die Probleme nicht da. Ich hab irgendwo gelesen das der Spinbutton wenn er in einer Userform untergebracht wird einen Startwert haben sollte und dieser in das UserForm_Initialize Ereigniss geschrieben werden muss.

Ich hab die Datei einfach mal angehangen und vielleicht hat hier einer von euch einen Denkanstoss. :-) Ich selber komm grad nicht drauf.

Mit freundlichen Grüßen

https://www.dropbox.com/s/7bihzicf8qad3qg/Test_1.xlsb?dl=0

+1 Punkt
Beantwortet von m-o Profi (22.8k Punkte)

Hallo,

um die Userform zu starten benutzt du das Worksheet_SelectionChange-Ereignis. Das funktioniert aber nur, wenn du die Auswahl änderst, d.h. eine andere Zelle auswählst. Wenn du die Zelle auswählst, dann wird die Userform gestartet. Beendest du die Userform, dann steht der Cursor immer noch in der Zelle und das löst eben nicht das SelectionChange-Ereignis aus. Erst wenn du eine andere Zelle und dann wieder deine Startzelle auswählst, wird der Userform erneut gestartet.

Ich würde daher das Doppelklick-Ereignis zum Starten der Userform nehmen:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("sprung7")) Is Nothing Then
        Cancel = True    'Doppelklick abbrechen
        Spin1.Show
        Exit Sub
    End If

End Sub

Gruß

M.O.

0 Punkte
Beantwortet von vernichter Mitglied (261 Punkte)
Hallo M.O.

das funktioniert natürlich aber die Zeilen verhalten sich immer noch so wie vorher.

Wenn du die Datei öffnest steht in A9 eine 3 aktivire ich die Userform und benutze den Spinbutton nach unten zählt er bis 10 und alles ist eingeblendet. Schließe ich die Userform und öffne sie wieder und benutze den Spinbutton nach oben zählt er munter runter aber das zeilen ausblenden bleibt bei mir stehen, erst wenn ich ein paar mal hoch und runter drücke klappt das ein und ausblenden.

Gruß
+1 Punkt
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi,

versuche es mal mit folgendem Code im Userform:

Private Sub SpinButton1_SpinDown()
    With ActiveSheet
        If .Range("A9") = 10 Then Exit Sub
        .Rows(13 & ":" & .Range("A9") + 10).Hidden = False
        .Range("A9").Value = .Range("A9").Value + 1
        TextBox1 = .Range("A9")
        SpinButton1.Value = .Range("A9")
    End With
End Sub

Private Sub SpinButton1_SpinUp()
    With ActiveSheet
        If .Range("A9") = 3 Then Exit Sub
        .Rows(.Range("A9").Value + 10 & ":" & .Range("A9").Value + 9).Hidden = True
        .Range("A9").Value = .Range("A9").Value - 1
        TextBox1 = .Range("A9")
        SpinButton1.Value = .Range("A9")
    End With
End Sub

Private Sub UserForm_Activate()
    With ActiveSheet
        SpinButton1.Min = 3
        SpinButton1.Max = 10
        TextBox1.Value = .Range("A9")
        SpinButton1.Value = .Range("A9")
    End With
End Sub


Lösche außerdem das Change_Ereignis der TextBox.

Bis später, Karin

0 Punkte
Beantwortet von vernichter Mitglied (261 Punkte)
Hi,

es hackt schon mal nicht. :-) Der Breich 1-12 ist bei mir der feste Bereich. Der ein oder auszublendene Bereich wäre 13-26. Wenn ich also 1x SpinDown drücke soll er mir 13-14 anzeigen noch mal drücken 15-16 dann 17-18 dann 19-20 dann 21-22 dann 23-24 und zum Schluss 25-26. Bei SpinUp das ganze halt umgedreht aber angefangen mit 25-26.

Gruß
+1 Punkt
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi,

also sollen immer 2 Zeilen aus- bzw. eingeblendet werden?

Spielt es eine Rolle, welcher Wert in A9 und der TextBox steht, solange die korrekten Zeilen aus-/eingeblendet werden? Wenn nicht, dann so:

Private Sub SpinButton1_SpinDown()
    With ActiveSheet
        If .Range("A9") = 7 Then Exit Sub
        .Rows(13 & ":" & 14 + 2 * .Range("A9")).Hidden = False
        .Range("A9").Value = .Range("A9").Value + 1
        TextBox1 = .Range("A9")
        SpinButton1.Value = .Range("A9")
    End With
End Sub

Private Sub SpinButton1_SpinUp()
    With ActiveSheet
        If .Range("A9") = 0 Then Exit Sub
        .Rows(11 + 2 * .Range("A9").Value & ":" & 12 + 2 * .Range("A9").Value).Hidden = True
        .Range("A9").Value = .Range("A9").Value - 1
        TextBox1 = .Range("A9")
        SpinButton1.Value = .Range("A9")
    End With
End Sub

Private Sub UserForm_Activate()
    With ActiveSheet
        SpinButton1.Min = 0
        SpinButton1.Max = 10
        TextBox1.Value = .Range("A9")
        SpinButton1.Value = .Range("A9")
    End With
End Sub

Bis später, Karin

0 Punkte
Beantwortet von vernichter Mitglied (261 Punkte)
Hi Katrin aka beverly,

gehen wir mal davon aus das in A9 eine 3 steht und die Zeilen 13-26 ausgeblendet sind. Das wäre jetzt mal die Startansicht.

Der User kommt jetzt und hat die Möglichkeit ab B7-B12 etwas einzutragen. zb. B7 17:00 Uhr in B8 schreibt er vieleicht noch kommt erst um 18:00 Uhr. Der User kann also 3 LKW's an legen. Jeder LKW hat 2 Zeilen für sich. Drückt der User nun 1 x SpinDown so soll sich der Wert in der Textbox und auch in A9 um 1 erhöhen und die Zeilen 13-14 einblenden.

Der User hat nun die Möglichkeit 4 LKW's einzutragen. Die maximale Anzahl an LKW wäre 10 vobei hier eben alle Zeilen einblendet sind und die minimale Anzahl ist 3 vobei hier eben alle Zeilen ausblendet sind Für den Anwender ist es schon wichtig das er beim öffnen sieht welche Anzahl an LKW eingestellt sind wenn jetzt zb. 5 in der Textbox und A9 steht er aber nur 3 LKW braucht drückt er 2 x SpinUp und hat dann 3 LKW die er eintragen kann. Immer 2 Zeilen ein oder ausblenden ist richtig.

Gruß
...