Excel Schaltflächen
#1
Hallo,

wer kennt sich mit Schaltflächen aus? Wir möchten zum Straßenfest quasi eine digitale Strichliste führen um den Verbrauch der Nachbarn im Nachgang abzukassieren. Um an dem Abend nicht immer in jeder Zeile +1 zu schreiben hätte ich gerne eine Schaltfläche je Zelle um per Mausklick automatisch +1 zuzurechnen.... Geht das? Und wie?


Angehängte Dateien
.xlsx   Mappe12.xlsx (Größe: 16,38 KB / Downloads: 16)
Antworten Top
#2
Hi
das würde ich nicht mit Schaltflächen machen, sondern mit Doppelklick

dieser Code ins Modul des Tabellenblatt:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column >= 3 And Target.Column <= 8 And Target.Row >= 5 Then
    Target.Value = Target.Value + 1
    Cancel = True
End If
End Sub

dann reicht ein Doppelklick auf die Zelle in der Zeile der Familie und der Spalte des Produkts, um diesen Zellwert um 1 zu erhöhen.
Vor allem musst du nichts ändern, wenn weitere Familien hinzukommen.

Gruß Daniel
Antworten Top
#3
Und wenn Du Dich "verdoppelklickt" hast, kannst Du per Rechtsklick abziehen.
Ich habe auch das Ausrechnen automatisiert.
=SUMMENPRODUKT(MTRANS(C5:H5);L$5:L$10)

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("C5:I7")) Is Nothing Then
  Target = Target + 1
  Cancel = True
End If
End Sub


Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("C5:I7")) Is Nothing Then
  If Target = 1 Then
    Target = ""
  Else
    Target = Target - 1
  End If
  Cancel = True
End If
End Sub

Meine Übungsdatei im Anhang.

Gruß Ralf

Da war noch ein kleineres Logikproblem beim Rechtsklick:
Code:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("C5:I7")) Is Nothing Then
  If Target > 1 Then
    Target = Target - 1
  ElseIf Target = 1 Or Target = vbNullString Then
    Target = vbNullString
  End If
  Cancel = True
End If
End Sub


Angehängte Dateien
.xlsm   Up and down.xlsm (Größe: 19,49 KB / Downloads: 12)
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#4
...Alternative zu Schaltflächen und Doppelklick - ganz ohne Makros:
mit Drehfeld (=> Entwicklertools ....)
   

Verknüpfung der Drehfelder mit der jeweiligen Zelle (Rechtsklick auf Drehfeld => Steuerelement formatieren....):
   

Siehe angehängte Beispieldatei (basierend auf der aufgehübschten Datei von Ralf )

Ist halt ein bisschen (einmalige) Fleissarbeit, die Drehfelder zu erstellen und die Zellverknüpfung vorzunehmen.
Von daher ist die Makro-Lösung mit dem Doppelklick bzw. Rechtsklick von Daniel / Ralf schon schick(er)

Gruß
Fred


Angehängte Dateien
.xlsx   Up and down_Drehfeld_fs.xlsx (Größe: 21,96 KB / Downloads: 9)
< es lebe die Hilfsspalte >
Antworten Top
#5
Moin Fred!
Zunächst mal: gute Idee!

Wie man mich kennt, folgt jetzt ein kleines ABER:
Zitat:Ist halt ein bisschen (einmalige) Fleissarbeit, die Drehfelder zu erstellen und die Zellverknüpfung vorzunehmen.
Kommt drauf an! Wink
Ich habe mir Deine Überarbeitung angesehen.
Kennst Du die Bedeutung der Strg- und Alt-Taste beim Erstellen von Shapes?
Ich glaube nicht, da die Drehfelder nicht sauber platziert sind.

Daher mal der Ablauf, wie ich sie erstellen würde:
• Drehfeld in den Entwicklertools auswählen
• irgendwo oben links in C5 klicken und die linke Maustaste gedrückt halten
bei gedrückter Alt-Taste die Maus ein wenig nach unten rechts bewegen
• Maustaste loslassen
jetzt ist die gesamte Zelle C7 mit dem Drehfeld gefüllt
• am rechten Anfasser die gewünschte Breite einstellen
• Drehfeld wie gewünscht formatieren (Max und Ausgabezelle)
• das Drehfeld bleibt markiert!

Damit man dies nicht für jede einzelne Zelle durchführen muss, wird das Drehfeld jetzt sehr schnell in alle Zellen kopiert:
• drücke Strg + Alt gleichzeitig und ziehe das Drehfeld in die nächste Zelle (Strg+Alt bleiben gedrückt)
• Maustaste loslassen und obigen Schritt so häufig wiederholen, bis alle Zellen gefüllt sind
• die Fleißaufgabe besteht nun darin, die Ausgabezelle festzulegen.

Nevertheless schreibe ich gleich mal ein "Wegwerf-Konstruktionsmakro", welches die Fleißarbeit abnimmt.

Gruß Ralf

And here it is:
Sub Fill_range_with_spinners()
Dim Zelle As Range
  For Each Zelle In Range("C5:H7")
    With Zelle
      With Tabelle1.Spinners.Add(.Left, .Top, 20, .Height)
        .Max = 20
        .LinkedCell = Zelle.Address
      End With
    End With
  Next
End Sub
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#6
Hallo Ralf,

ja, dass man mit der Alt-Taste generell Objekte am Zellraster ausrichten kann ist mir bekannt.
Als ich in der Beispieldatei die Drehfelder platziert habe, habe ich in dem Moment aber tatsächlich nicht daran gedacht.
(Danke für's in Erinnerung rufen....)
Bzw. es war mir nicht wichtig für dieses Beispiel die Buttons "perfekt" auszurichten; es ging mir da nur so generell um das Prinzip mit den Drehfeldern ("quick & dirty")....
Mit der von dir beschriebenen Vorgehensweise ist das natürlich schon besser (hübscher).

Wobei in deiner Beschreibung meiner Meinung nach noch ein kleiner Fehler enthalten ist
Der Punkt
Zitat:• irgendwo oben links in C5 klicken und die linke Maustaste gedrückt halten

müßte eigentlich so lauten:
Zitat:bei gedrückter Alt-Taste irgendwo oben links in C5 klicken und die linke Maustaste gedrückt halten
Zumindest hat's bei mir (Excel 2021) nur so funktioniert

Übrigens habe ich in dem Beispiel die 18 Buttons nicht alle einzeln in jede Zelle kopiert/platziert.
Sondern nur die drei in der ersten Spalte.
Dann habe ich diese drei markiert und alle drei zusammen in die anderen 5 Spalten kopiert (mit gedrückter STRG-Taste "verschoben")
So gings für mich am schnellsten (quick &...)

Gruß
Fred
< es lebe die Hilfsspalte >
Antworten Top
#7
Hallo zusammen,

also mal ganz ehrlich: kann man so machen, aaaber, was ist wenn sich da wer verklickt? Man dann da nichts nachvollziehen. Ganz abgesehen davon, erscheint mir das alles sehr umständlich. Da würde ich ganz analog mit Bons und einer Kiste arbeiten.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
[-] Folgende(r) 1 Nutzer sagt Danke an Klaus-Dieter für diesen Beitrag:
  • ws-53
Antworten Top
#8
Wenn schon, dann entweder Doppelklick, oder Schaltfläche mit Bestätigungsabfrage. Weiterhin sollten dann auch alle Buchungen protokolliert werden.

Aber ich würde es klassisch mit Strichliste (immer 4 Senkrecht und der 5. quer) machen !!!
Antworten Top
#9
Hallo,

mit Doppelklick habe ich es nicht gemacht, aber mit Sicherheitsabfrage.

Man könnte auch ungewollte Eingaben noch zusätzlich mit via API Timer für 1 bis 2 Sek. sperren oder irgendwas in der Art.  Einen Button für -1 kann man auch noch einbauen.

Hier mal die Umsetzung via UDF und Eingabestatistik.
Das sollte einigermaßen brauchbar sein. 

Dies ist natürlich einfach nur so eine Idee.
Passwort zum entsperren lautet "Posaune" (findet man auch im VBA Code)

.xlsm   Berechnung Getränke per Familie.xlsm (Größe: 37,89 KB / Downloads: 1)

Gruß Uwe
Antworten Top


Gehe zu:


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