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

Klick auf eine Zelle - Wert eintragen

Forumthread: Klick auf eine Zelle - Wert eintragen

Klick auf eine Zelle - Wert eintragen
04.11.2007 13:03:00
Larissa
Hallo,
ich mit einem einfachen Klick in einer Zelle von Spalte A ein "x" ein- oder austragen.
Dieses Makro habe ich gebastelt (für das Tabellenblatt). Es funktioniert aber nicht richtig:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Column = 1 Then
Select Case Target
Case "x"
Target.Offset(0, 0).Value = ""
Case ""
Target.Offset(0, 0).Value = "x"
End Select
End If
End Sub


Das "x" wird erst nach "Enter" eingetragen und das dauert irgendwie so lange.
Hat jemand vielleicht eine Idee, wie das schneller und besser funktioniert?
Vielen Dank, Larissa

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Klick auf eine Zelle - Wert eintragen
04.11.2007 13:06:19
Josef
Hallo Larissa,
dafür nimmt man besser das Doppelklick-Ereignis.
' **********************************************************************
' Modul: Tabelle2 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 1 Then
    Cancel = True
    If Target = "x" Then
        Target = ""
    Else
        Target = "x"
    End If
End If
End Sub

Gruß Sepp

Anzeige
AW: Klick auf eine Zelle - Wert eintragen
04.11.2007 13:19:33
Larissa
Danke Sepp,
stimmt, das funktioniert besser.
Dankeschön.
Larissa

AW: Klick auf eine Zelle - Wert eintragen
04.11.2007 13:51:00
Jean
Hallo Sepp,
zu Deinem Programm 2 Fragen:
A. Gibt es eine Regel wann man das Klick und wann man das Doppelklickereignis nehmen sollte?
B. Was bedeutet denn genau die folgende Zeile?
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Ich würde mich freuen, wenn Du kurz auf die Fragen eingehen würdest.
Gruß
Jean

Anzeige
AW: Klick auf eine Zelle - Wert eintragen
04.11.2007 14:04:00
Josef
Hallo Jean
Zu Frage 1:
Wann man das "Change" oder "Doppelklick" Ereignis verwendet, hängt davon ab was man machen will.
In Larissas Fall ist das Change-Ereignis meiner Meinung nach ungeeignet.
Probiere das mal in einer Tabelle
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 1 And Target.Count = 1 Then
    Application.EnableEvents = False
    If Target = "x" Then
        Target = ""
    Else
        Target = "x"
    End If
    Application.EnableEvents = True
End If
End Sub

Zu Frage 2:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
End Sub


das ist das Ereignis, das bei einem Doppelklick in einer Zelle aufgerufen wird.

Gruß Sepp

Anzeige
AW: Klick auf eine Zelle - Wert eintragen
04.11.2007 14:12:37
Jean
Hallo Sepp,
vielen Dank für Dein überzeugendes Beispiel. Die Wirkung ist nun verstanden.
Unklar bleibt das BeforeDoubleClick, also das Wort Before, das ich mir nicht erklären kann.
Vielleicht hast Du auch dazu eine Begründung. Sonst bleibt dieses Detail mal offen.
Gruß
Jean

Anzeige
AW: Klick auf eine Zelle - Wert eintragen
04.11.2007 14:18:06
Daniel
Hi
zu A)
naja, Regeln gibts da nicht, das hängt auch vom Persönlichen Klickverhalten ab.
da ich aber zumbeispiel oft recht gedankenlos im Tabellenblatt herumklicke, halte ich es für sinnvoll,
- Makros, die berechungsrelevante Zellwerte verändern, mindestens durch den Doppelklick zu starten.
- Makros, keine Werte verändern, sondern nur bestimmte Sachen anzeigen und ansonsten keine die Berechnung verändernde Wirkung haben, kann man auch über den Einfachklick auslösen.
im Zweifelsfall muss man halt auspobieren, womit der Anwender besser zurecht kommt
zu B)
Worksheet_BeforeDoubleClick
sagt aus, daß das Makro bei einem Doppelklick gestartet wird
das Before deshalb, weil Excel beim Doppelclick selbst eine Aktion ausführen will (Öffnen des Bearbeitungsmodus), dein Makro aber vorher ausgeführt wird.
Target As Range
TARGET ist ein Range-Objekt, daß die Zelle beinhaltet, die Doppelt-geklickt wurde.
dieses Range-Objekt kannst du in deinem Kode verwenden.
Beispiel: Wert der Doppelt-gellicken Zelle um 1 erhöhen:

Target.Value = Target.Value +1



Cancel As Boolean

Wie gesagt, Excel will beim Doppelklick ja selber ne Aktion ausführen. (Bearbeitungsmodus öffnen)
wenn du jetzt irgendwo im Code


Cancel = True 


setzt, wird diese Aktion nicht ausgeführt, sondern nur dein Makro.
das ist z.B. Sinnvoll, wenn du durch den Doppelklick ne Userform aktivieren willst.
wäre dann der Zellbearbeitungsmodus aktiv, könntest du nicht direkt in der Userform arbeiten, sondern müsstest erst in eine andere Zelle klicken, um den Bearbeitungsmodus zu daktivieren.
gruß, Daniel

Anzeige
AW: Klick auf eine Zelle - Wert eintragen
04.11.2007 14:26:00
Jean
Hallo Daniel,
ich danke Dir für Deine Erläuterungen, die mich wieder ein Stück weiter bringen.
Bleibt noch eine Frage offen:
Was bewirkt die folgenden Zeile in den Codebeispielen?
Application.EnableEvents = False bzw. true
Da ist noch eine Verständnislücke vorhanden.
Gruß
Jean

Anzeige
AW: Klick auf eine Zelle - Wert eintragen
04.11.2007 14:49:28
Daniel
Hi
den Event-gesteuerten Makros ist es egal, ob das Event von Hand oder von einem anderen Makro ausgelöst wird.
dh. wenn du ein Worksheet_Change Makro hast, wird dieses immer aufgerufen, sobalt irgendwo ein Zellwert eins Tabellenblatt geschreiben wird.
das hat zur folge, daß sich die Event-Gesteuerten Makros gegenseitig bzw. wie im oben genannten Fall sich selbst aufrufen.
Das ist aber nicht immer erwünscht, weil es u.U. ein paar unangenehme Folgen haben kann wie lange Makrolaufzeiten.
Daher kann man das mit APPLICATION.ENABLEEVENTS = FALSE unterbinden.
man darf aber nicht vergessen, den Wert am Makroende wieder auf TRUE zu setzen, weil die Einstellung auch nach dem Makrolauf erhalten bleibt.
dies ist besonderst zu beachten, wenn das Makro mit Fehler vorzeitig abbricht.
dann musst du über den Editior im Direktfenster die EVENTS wieder von Hand aktivieren.
Gruß, Daniel
bzw kennst du die Hilfe-Funktion im Editor?
Cursor auf den Begriff setzen, den man erklärt haben will und dann F1 drücken.
wenn man sich mal eingelesen hat, ist diese Hilfe brauchbarer als man von Microsoft-Hilfen allgemein glaubt.

Anzeige
AW: Herzlichen Dank
04.11.2007 15:00:00
Jean
Hallo Daniel,
herzlichen Dank für die ausführliche Beantwortung meiner Fragen und auch für den Hinweis auf die Hilfe, die ich nun häufiger zu Rate ziehen werde.
Gruß
Jean
Anzeige
Anzeige

Infobox / Tutorial

Klick auf eine Zelle - Wert eintragen in Excel


Schritt-für-Schritt-Anleitung

Um in Excel mit einem Klick in einer Zelle einen Wert (z.B. "x") einzutragen oder zu entfernen, kannst Du ein Makro verwenden. Hier ist eine einfache Anleitung, wie Du dies mit dem Doppelklick-Ereignis umsetzen kannst:

  1. Öffne das Excel-Dokument und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Wähle das entsprechende Arbeitsblatt im Projektfenster aus (z.B. "Tabelle1").

  3. Füge den folgenden Code ein:

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
       If Target.Column = 1 Then
           Cancel = True
           If Target = "x" Then
               Target = ""
           Else
               Target = "x"
           End If
       End If
    End Sub
  4. Schließe den VBA-Editor und teste das Makro, indem Du auf eine Zelle in Spalte A doppelklickst.

Mit diesem Code kannst Du durch Doppelklick in der Zelle "x" eintragen oder entfernen, was schneller und effizienter ist als das "Change"-Ereignis.


Häufige Fehler und Lösungen

  • Das Makro funktioniert nicht: Stelle sicher, dass Du den Code im richtigen Arbeitsblatt-Fenster eingefügt hast.
  • Das "x" wird nicht angezeigt: Überprüfe, ob Du das Doppelklick-Ereignis korrekt programmiert hast.
  • Excel reagiert langsam: Verwende Application.EnableEvents = False zu Beginn des Codes, um unerwünschte Rekursionen zu vermeiden.

Alternative Methoden

Falls Du das Verhalten von Mausklicks anpassen möchtest, kannst Du auch das Worksheet_SelectionChange-Ereignis verwenden:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column = 1 And Target.Count = 1 Then
        Application.EnableEvents = False
        If Target = "x" Then
            Target = ""
        Else
            Target = "x"
        End If
        Application.EnableEvents = True
    End If
End Sub

Diese Methode ermöglicht es, das "x" durch einfaches Klicken zu wechseln, ohne den Doppelklick zu verwenden.


Praktische Beispiele

Beispiel 1: Verwende das Doppelklick-Ereignis, um in einer Aufgabenliste zu markieren, ob eine Aufgabe erledigt ist.

Beispiel 2: Nutze die SelectionChange-Methode, um in einer Budgettabelle zwischen verschiedenen Statusangaben (z.B. "offen", "in Bearbeitung", "erledigt") zu wechseln.


Tipps für Profis

  • Verwende Application.EnableEvents: Wenn Du mehrere Makros hast, die sich gegenseitig aufrufen, kann dies die Performance beeinträchtigen. Setze Application.EnableEvents = False am Anfang und True am Ende Deines Codes.
  • Dokumentiere Deinen Code: Füge Kommentare ein, um die Funktionalität Deines Codes zu erklären. Das hilft nicht nur Dir, sondern auch anderen, die Deinen Code lesen.
  • Teste Deine Makros gründlich: Überprüfe, ob alle Eventualitäten abgedeckt sind, um unerwartete Fehler zu vermeiden.

FAQ: Häufige Fragen

1. Wann sollte ich Doppelklick statt Klick verwenden? Das hängt von der Funktionalität ab. Doppelklick ist sinnvoll, wenn Du sicherstellen möchtest, dass der Benutzer bewusst eine Aktion ausführt, während ein einfacher Klick für weniger kritische Aktionen geeignet sein kann.

2. Was bewirken die Zeilen Application.EnableEvents = False und True? Diese Zeilen deaktivieren und aktivieren das Event-System von Excel. Dies verhindert, dass andere Makros während der Ausführung Deines Codes automatisch gestartet werden, was die Performance verbessert und unerwünschte Rekursionen vermeiden kann.

3. Wie kann ich das Makro wieder deaktivieren? Um das Makro zu deaktivieren, kannst Du einfach den entsprechenden Code aus dem VBA-Editor löschen oder die Datei als .xlsx speichern, wodurch alle Makros entfernt werden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige