Buchstaben durch Klick automatisch eingeben?
Habe eine Einkaufsliste in Excel. Hinter jedem Artikel hab ich eine Zelle, die bei Bedarf einen Inhalt (was ist egal) haben muss, sodass die benötigten Artikel automatisch in einer anderen Tabelle angezeigt bezw. ausgedruckt werden.
Mit dem bisherigen System (einfach mit irgendeiner Eingabe) klappt alles bestens.
Gibt es aber ev. die Möglichkeit, dass ich nicht eine Zelle anklicken und dann noch eine Eingabe machen muss? Sondern nur anklicken und der Rest macht es automatisch. Bin mit VBS nur beschränkt befreundet.
Ist nur eine "Spielerei" aber wäre trotzdem sehr interessant. Vielen Dank schon jetzt.
3 Antworten
Du könntest auf das Worksheet-Ereignis SelectionChange reagieren.
Falls es dich stört, dass das auch darauf reagiert, wenn du mit den Pfeiltasten dorthin gehst, kannst du auch auf das Ereignis BeforeDoubleClick reagieren - dann passiert nur was bei Doppelklick. Das erfordert dann aber einen Doppelklick. (Einen Ereignishandler für einen einfachen Klick habe ich nicht gefunden - nur einen für einen Rechtsklick: BeforeRightClick)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count = 1 Then
If Target.Column = 4 Then 'Spalte D; für andere Spalten entsprechend anpassen
If Me.Cells(Target.Row, Target.Column - 1).Value <> Empty Then 'Nur ausführen, wenn in der Zelle links von der angeklickten auch was steht
Target.Value = "SelectionChange"
End If
End If
End If
End Sub
bzw.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Cells.Count = 1 Then
If Target.Column = 4 Then 'Spalte D; für andere Spalten entsprechend anpassen
If Me.Cells(Target.Row, Target.Column - 1).Value <> Empty Then 'Nur ausführen, wenn in der Zelle links von der angeklickten auch was steht
Target.Value = "DoubleClick"
Cancel = True 'Verhindert, dass die Zelle dann auch "betreten" wird
End If
End If
End If
End Sub
bzw.
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Target.Cells.Count = 1 Then
If Target.Column = 4 Then 'Spalte D; für andere Spalten entsprechend anpassen
If Me.Cells(Target.Row, Target.Column - 1).Value <> Empty Then 'Nur ausführen, wenn in der Zelle links von der angeklickten auch was steht
Target.Value = "RightClick"
Cancel = True 'Verhindert, dass das Kontextmenü aufgerufen wird
End If
End If
End If
End Sub
Hab mich für die erste Variante entschieden. (Aufwandminimierung 🙂)
Dann noch das Target.Value = "SelectionChange" gem. Anregung von Oubyi auf = ChrW$(&H2714) gewechselt.
Funktioniert einwandfrei und sieht super aus! DANKE und schönen Sonntag.
P.S.:
Weil ich gerade Deinen Kommentar zu Maximus' Antwort lese.
Mit:
Target.Value = ChrW$(&H2714)
kannst Du auch ein schönes Häkchen direkt in die Zelle setzen, dann gibt es kein Problem beim Sortieren.
Ganz gute Idee. Hab bis jetzt einfach ein x-beliebigen Buchstaben angegeben. In den Auswertungen kommt es sowieso als "X". Sieht so aber schon "aufgeräumter" auf. Danke
Wenn ich dich richtig verstehe, möchtest du nicht jedes Mal einen Begriff in die Zelle neben dem Artikel eingeben, sondern aus einer vorgefertigten Liste einen Begriff auswählen?
Wenn dem so ist, würde ich mit einem Dropdownfeld arbeiten. Wie du dieses in Excel erstellst, steht hier:
Danke
Suche aber eine Möglichkeit, um mit einem Klick in die Zelle (ohne weitere Eingabe) den Wert der Zelle zu verändern
Steuerelement/Kontrollkästchen war ein gutes Stichwort. Aber - die ganze Tabelle soll auch sortiert werden und ich kriege es (noch) nicht hin, dass die Kästchen in der richtigen Zeile bleiben. Kannst Du mir da weiterhelfen? Danke
Suche aber eine Möglichkeit, um mit einem Klick in die Zelle (ohne weitere Eingabe) den Wert der Zelle zu verändern
Heißt das, Du willst quasi eine Liste "durchklicken"?
Da sehe ich das Problem, dass es in VBA kein Ereignis gibt - soweit ich weiß - das einen einfachen Klick in die Zelle abfängt.
Es muss schon ein Doppelklick sein.
DAS würde, für den Bereich B1:B100, so funktionieren:
Mach einen Rechtsklick auf den Tabellenreiter (unten, da wo z.B. Tabelle1 steht) und gehe dann auf "Code anzeigen...".
In das große Fenster des VBA-Editors, der sich dann öffnet kopierst Du folgenden Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("B1:B100")) Is Nothing Then
Select Case Target.Value
Case ""
Target.Value = "Egal_A"
Cancel = True
Case "Egal_A"
Target.Value = "Egal_B"
Cancel = True
Case "Egal_B"
Target.Value = "Egal_C"
Cancel = True
Case "Egal_C"
Target.Value = "Egal_D"
Cancel = True
Case "Egal_D"
Target.Value = ""
Cancel = True
End Select
End If
End Sub
Die Datei musst Du danach aber als .xlsm speichern, und Makros zulassen.
Bei Doppelklick in eine der Zellen im Bereich B1:B100 wird dann die Liste pro Klick von Leer über "Egal_A/B/C/D" bis wieder zu Leer durchlaufen.
Das ist erstmal nur ein primitives Beispiel und lässt sich sicherlich optimieren und auch erweitern.
Wäre das ein Ansatz für Dich?
P.S.:
Da habe ich wohl mal wieder zu kompliziert gedacht und die Aufgabenstellung war einfacher und wurde von PWolf (DH!) sehr gut gelöst (siehe meine Kommentar dort).
Allerdings bin ich mir nicht böse wegen der Zeitverschwendung, denn meine Lösung werde ich mir merken, da die imho für andere Aufgabenstellungen recht interessant sein kann. 🙂
Ich habe mir jetzt die Frage nochmal durchgelesen und denke, dass Du es richtig verstanden hast und ich es zu kompliziert ausgelegt habe, indem ich nach jedem Klick einen anderen Eintrag aus einer Liste generiere und das quasi als Schleife.
Ich hatte gedacht! die Einträge sollten je nach Wert der Zelle in eine andere Tabelle übernommen werden.
So war das aber wohl gar nicht gemeint - wenn ich mir die Frage nochmal genau ansehe, sondern es gibt nur eine Tabelle.
P.S.: Allerdings bin ich mir nicht böse wegen der Zeitverschwendung, denn meine Lösung werde ich mir merken, da die imho für andere Aufgabenstellungen recht interessant sein kann. 🙂