Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Klick in eine Zelle abfragen

Forumthread: Klick in eine Zelle abfragen

Klick in eine Zelle abfragen
21.06.2015 17:28:28
Jan

Hallo, ich möchte gern bei einem Klick in eine Zelle, eine Iinputbox generieren lassen, deren Inhalt soll dann in der angeklickten Zelle dargestellt werden. Wie kann ich per Makro das Klick Event abfangen?

Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Klick in eine Zelle abfragen
21.06.2015 17:34:07
Hajo_Zi
starte den VBA Editor (Alt+F11), Bild sollte zweigeteilt sein ansonsten Strg+R, Doppelklick auf Deine Datei, Doppelklick auf Deine Tabelle, Code ins rechte Fenster kopieren, VBA Editor schließen.
Das Makro wird automatisch gestartet.
Der Code wirkt nur in dieser Tabelle.
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$1" Then
Target = InputBox("Bitte gesuchten Namen eingeben!!")
End If
End Sub

Anzeige
AW: Klick in eine Zelle abfragen
21.06.2015 19:05:36
Jan
Danke, wie kann ich jetzt noch den Bereich eingrenzen? Ich möchte nur die Klicks abfangen die im Bereich J14 bis M31 sind. Mit Target und >< kann ich nicht arbeiten?

AW: Klick in eine Zelle abfragen
21.06.2015 19:10:47
Hajo_Zi

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim RaBereich As Range                          ' Variable für Bereich
Dim RaZelle As Range                            ' Variable für Zelle
Set RaBereich = Range("J14:M31 ")               ' Bereich der Wirksamkeit
' noch mehr Bereiche
'Set RaBereich = Union(Range("C11:AG11 , C13:AG13, C15:AG15 , C17:AG17"), _
'    Range("C35:AE35, C37:AE37, C43:AG43, C45:AG45 , C47:AG47 , C49:AG49"), _
'    Range("C67:AF67 , C69:AF69 , C75:AG75 , C77:AG77 , C79:AG79 , C81:AG81"), _
'    Range("C99:AF99 , C101:AF101, C107:AG107 , C109:AG109 , C111:AG111"), _
'    Range("C127:AG127 , C129:AG129 , C131:AG131 , C133:AG133 , C139:AF139"), _
'    Range("C155:AG155, C157:AG157 , C159:AG159 , C161:AG161 , C163:AG163"), _
'    Range("C179:AF179 , C181:AF181, C187:AG187 , C189:AG189 , C191:AG191"))
' damit werden nur noch die Zellen bearbeitet die im vorgegeben Bereich liegen
' jede Zelladresse ist einzeln angegeben
Set RaBereich = Intersect(RaBereich, Range(Target.Address))
If Not RaBereich Is Nothing Then
'ActiveSheet.Unprotect ("Passwort")
For Each RaZelle In RaBereich
With RaZelle
RaZelle = InputBox("Bitte gesuchten Namen eingeben!! für Zelle " & .Address( _
False, False))
End With
Next RaZelle
'ActiveSheet.protect ("Passwort")
End If
Set RaBereich = Nothing                         ' Variable leeren
End Sub
Gruß Hajo

Anzeige
Range(Target.Address) ...?!
21.06.2015 19:19:47
{Boris}

Set RaBereich = Intersect(RaBereich, Range(Target.Address))
Zwar nicht falsch, aber mindestens von hinten durch die Brust ins Auge.
Besser:
Set RaBereich = Intersect(RaBereich, Target)
VG, Boris

AW: Range(Target.Address) ...?!
21.06.2015 21:58:25
Luschi
Hallo {Boris},
auf diese Unsitte habe ich Hajo schon mehrmals hingewiesen, aber entweder er liest meine Antworten dazu nicht oder sein Lerneifer, neue Anregungen zu verinnerlichen, ist nicht sehr ausgeprägt.
Gruß von Luschi
aus klein-Paris

Anzeige
Ja, Luschi, ...
21.06.2015 23:37:01
Luc:-?
…Hajo legt Namenslisten unter den Rubriken Nicht antworten! und verschärft Nicht lesen und nicht antworten! an. Nun darfst du überlegen (falls du magst), ob es einen Anlass für ihn gegeben haben könnte, dich auf eine dieser Listen zu setzen… ;-))
Gruß, Luc :-?

Anzeige
AW: Klick in eine Zelle abfragen
21.06.2015 19:20:37
Jan
Super Klasse Danke und so schnell. Wenn ich die Inputbox nun umgehen möchte und auf ein Userform umleite. Wie kann ich den Target.Adress Bereich in eine Variable übergeben, damit ich in dem Userform wieder in diese Zelle schreiben kann? Ich würde gern so ein Form zwischenschalten?

AW: Klick in eine Zelle abfragen
21.06.2015 19:26:28
Hajo_Zi
UserForm1.Tag = RaBereich.Address
UserForm1.Show
Gruß Hajo

Anzeige
AW: Klick in eine Zelle abfragen
21.06.2015 19:28:37
Hajo_Zi
und komplett.
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim RaBereich As Range                          ' Variable für Bereich
Dim RaZelle As Range                            ' Variable für Zelle
Set RaBereich = Range("J14:M31 ")               ' Bereich der Wirksamkeit
' noch mehr Bereiche
'Set RaBereich = Union(Range("C11:AG11 , C13:AG13, C15:AG15 , C17:AG17"), _
'    Range("C35:AE35, C37:AE37, C43:AG43, C45:AG45 , C47:AG47 , C49:AG49"), _
'    Range("C67:AF67 , C69:AF69 , C75:AG75 , C77:AG77 , C79:AG79 , C81:AG81"), _
'    Range("C99:AF99 , C101:AF101, C107:AG107 , C109:AG109 , C111:AG111"), _
'    Range("C127:AG127 , C129:AG129 , C131:AG131 , C133:AG133 , C139:AF139"), _
'    Range("C155:AG155, C157:AG157 , C159:AG159 , C161:AG161 , C163:AG163"), _
'    Range("C179:AF179 , C181:AF181, C187:AG187 , C189:AG189 , C191:AG191"))
' damit werden nur noch die Zellen bearbeitet die im vorgegeben Bereich liegen
' jede Zelladresse ist einzeln angegeben
Set RaBereich = Intersect(RaBereich, Range(Target.Address))
If Not RaBereich Is Nothing Then
'ActiveSheet.Unprotect ("Passwort")
'        For Each RaZelle In RaBereich
'            With RaZelle
UserForm1.Tag = RaBereich.Address
UserForm1.Show
'                RaZelle = InputBox("Bitte gesuchten Namen eingeben!! für Zelle " & .Address( _
False, False))
'            End With
'        Next RaZelle
'ActiveSheet.protect ("Passwort")
End If
Set RaBereich = Nothing                         ' Variable leeren
End Sub

Gruß Hajo

Anzeige
AW: Klick in eine Zelle abfragen
21.06.2015 19:38:21
Jan
Perfekt Merci!!!

AW: Klick in eine Zelle abfragen
21.06.2015 17:35:27
Sepp
Hallo Jan,
entweder
Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
oder
Worksheet_SelectionChange(ByVal Target As Range)
Gruß Sepp

AW: Klick in eine Zelle abfragen
22.06.2015 07:31:50
Jan
Nein Sepp.Also dann mal ganz einfach:
Ich habe in A1 eine variable Dropdownliste diese ist abhängig von einer andere Liste. Aber das ist ja egal. Meine Liste in A1 ist also eine Liste mit 10 beliebigen Einträgen. Wenn ich in A1 klicke, kann ich einen der 10 Einträge aussuchen und anklicken,dann steht dieser Eintrag in A1 drin. Ich möchte nun mit einem Makro diese Auswahl "simulieren". Das heißt nach ausführen des Makros, soll der erste Eintrag in dieser Dropdwonliste in A1 drin stehen. Ist es so einfacher?

Anzeige
;
Anzeige

Infobox / Tutorial

Klick in eine Zelle abfragen und Inputbox nutzen


Schritt-für-Schritt-Anleitung

  1. Starte den VBA Editor, indem Du Alt + F11 drückst.

  2. Stelle sicher, dass das Fenster zweigeteilt ist. Falls nicht, drücke Strg + R.

  3. Doppelklicke auf Deine Excel-Datei und dann auf das Arbeitsblatt, in dem Du den Klick abfangen möchtest.

  4. Kopiere den folgenden Code in das rechte Fenster:

    Option Explicit
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
       If Not Intersect(Target, Range("J14:M31")) Is Nothing Then
           Target.Value = InputBox("Bitte gesuchten Namen eingeben!")
       End If
    End Sub
  5. Schließe den VBA Editor. Das Makro wird nun automatisch gestartet, wenn Du in den definierten Bereich klickst.


Häufige Fehler und Lösungen

  • Fehler: Das Makro funktioniert nicht.

    • Lösung: Stelle sicher, dass Du den Code korrekt in das richtige Arbeitsblatt eingefügt hast.
  • Fehler: Die Inputbox erscheint nicht.

    • Lösung: Überprüfe, ob Du in den Bereich J14:M31 klickst. Andernfalls wird die Inputbox nicht angezeigt.

Alternative Methoden

Eine alternative Methode, um den Klick in eine Zelle abzufangen, besteht darin, das Worksheet_BeforeDoubleClick-Event zu verwenden:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range("J14:M31")) Is Nothing Then
        Cancel = True
        Target.Value = InputBox("Bitte gesuchten Namen eingeben!")
    End If
End Sub

Diese Methode erfordert einen Doppelklick, um die Inputbox auszulösen.


Praktische Beispiele

  1. Eingrenzen des Bereichs: Wenn Du nur den Bereich J14:M31 nutzen möchtest, setze den Bereich im Intersect Befehl wie oben gezeigt.
  2. Verwendung von UserForms: Du kannst auch ein UserForm nutzen, um die Eingabe zu erleichtern. Setze den Tag des UserForms auf die Adresse der angeklickten Zelle:

    UserForm1.Tag = Target.Address
    UserForm1.Show

Tipps für Profis

  • Verwende Application.EnableEvents = False, um zu verhindern, dass das Makro während der Ausführung erneut ausgelöst wird. Setze es nach der Ausführung wieder auf True.
  • Wenn Du mehrere Bereiche abdecken möchtest, kannst Du die Union-Funktion verwenden, um mehrere Zellbereiche zu kombinieren.

FAQ: Häufige Fragen

1. Wie kann ich den Bereich für die Inputbox erweitern?
Du kannst den Bereich in der Intersect-Funktion anpassen, um weitere Zellen einzubeziehen.

2. Wie kann ich das Makro anpassen, um eine Fehlermeldung anzuzeigen, wenn keine Eingabe erfolgt?
Füge eine Überprüfung hinzu, die die Eingabe auf "" prüft, und zeige eine Fehlermeldung an, wenn die Eingabe leer bleibt.

If InputBox("Bitte gesuchten Namen eingeben!") = "" Then
    MsgBox "Keine Eingabe erfolgt!"
End If

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige