3.3k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo zusammen.
ich habe folgende Bitte.
Kann mir jemand ein kleines Makro schreiben, welches folgenden Zweck erfüllen soll.
Wenn ich eine Zelle mit der Maus anklicke, soll mit dem anklicken automatisch ein Buchstabe (im Normalfall ein "x") eingetragen werden.
Schön wäre es, wenn das Makro so gestaltet ist, das ich im Makro (Quelltext) den Buchstaben nur austauschen brauch, wenn ich mal (in einer anderen Datei) einen anderen Buchstaben oder auch Zahl brauche.
Wenn das möglich ist, wäre ich für eure Hilfe sehr dankbar.
Danke und Gruß Flodnug

21 Antworten

0 Punkte
Beantwortet von
Hallo xlKing,
danke für deine Alternativlösung.
War es so gewollt, das wieder auch bei einem Rechtsclick der Eintrag ausgeführt wird?
Das wäre nämlich lästig.
Danke und Gruß Flodnug
0 Punkte
Beantwortet von
Hallo Flodnug,

nein das war nicht so gewollt und tritt bei mir auch nicht so auf. Der Eintrag wird bei Rechtsklick auf eine
leere Zelle zwar gesetzt, das lässt sich leider nicht vermeiden, aber danach wird das Rightclick-Ereignis
ausgeführt, welches die Eintragung rückgängig macht.

Vielleicht liegts daran dass mein blöder Browser beim Einfügen wieder einen Zeilenumbruch zu viel
gemacht und damit das Rightclick-Ereignis ungültig gemacht hat. Bitte die Private-Sub-Zeile, wie oben, in
nur einer Zeile darstellen.

Den Inhalt des RightClick-Ereignisses solltest du jedoch durch folgende Zeile ersetzen:
[i]  If Not Target.HasFormula Then Target = Inhalt[/i]
Da war noch ein kleiner Bug drin, der bei Rechtsklick auf eine Formel, diese in einen Fixwert umwandelt. Die
geänderte Zeile behebt das.

Zu deiner anderen Frage: Was willst du jetzt noch mit nem Userform bezwecken? Das setzen der Kreuze bei
Mausklick erfolgt doch direkt im Worksheet. Da braucht man kein Userform für. Oder gehts dir nur um den
Links-Klick? Dafür gibts im User-Form das Click-Ereignis. Aber eben leider nur dort.
Eine Auswahl möglicher Ereignisse siehst du, wenn du in der Code-Ansicht des Userforms oben links in
der Dropdownfeld ein Steuerelement auswählst und dann den Dropdown-Button im Feld rechts daneben
betätigst.

Gruß Mr. K.
0 Punkte
Beantwortet von
Hallo xlKing,
danke für deine prompte Antwort.
Werde die Ergänzung entsprechend vornehmen.
Die Userform würde ich gern haben, um per Button das x zu setzen.
Da es nämlich mehrere 100 Zellen sind, die auszufüllen sind habe ich das Makro bereits mit
ActiveCell.Offset(1, 0).Select (habe ich aus anderem Makro kopiert)
erweitert. So kann ich dann mit der Maus immer an der selben Stelle (Userform) bleiben.
Gruß Flodnug
0 Punkte
Beantwortet von
Ähm, nichts für ungut. Aber warum haben VBA und ich uns dann die Mühe mit dem Klick gemacht?
[quote]Wenn ich eine Zelle mit der Maus anklicke, soll mit dem anklicken automatisch ein Buchstabe (im
Normalfall ein "x") eingetragen werden.[/quote]
Gut. Kann man immer mal gebrauchen. Aber ich bin nicht sicher ob dich jetzt richtig verstehe: Du willst also auf
einem Userform einen Button klicken, der bei jedem Klick ein x in aktive Zelle setzt und dann die Markierung
automatisch um 1 nach unten verschiebt? Warum kopierst du nicht einfach das x und füllst damit einen ganzen
Bereich aus? Oder du nimmst meine unvollständige Antwort 7 und hältst solange die Taste "Pfeil nach unten"
gedrückt bis die gewünschte Anzahl Zellen gefüllt ist.

Vielleicht kannst du ja mal nebenbei erwähnen, was du eigentlich genau vorhast. Dann ließe sich vielleicht ein
besseres Konzept erstellen.
Mr. K.
0 Punkte
Beantwortet von
Hallo xlKing,
danke erstmal für deine Antwort.
Natürlich war die Antwort mit dem anclicken schon ausreichend.
Und mit kopieren hört sich im ersten Moment gut an, ist aber recht unpraktisch, da ich vor jedem neuen x in verschiedene Zellen springen muß.
Es handelt sich um ein Ernährungsprotokoll mit mehreren 100 Nahrungsmitteln (NM).
Dazu lese ich zu jedem NM zunächst die Wirkung, dann schreibe ich in einer anderen Zelle Erfahrungen, dann springe ich wieder in die Spalte um das x zu setzen.
Hierfür könnte man die Lösung mit dem anclicken nutzen.
Manchmal kenne ich aber die NM und würde da gern ein Button nutzen.
Zudem könnte ich die Lösung mit dem Button in einer anderen Datei gebrauchen (dann aber mit Zahlen).
Diese Erfahrungen habe ich leider erst beim ausfüllen gemacht.
Ich bitte um Entschuldigung, wenn sich das alles sehr umständlich angehört hat..
Ich dacht nur das geht relativ einfach, da ich ja schonmal aus Private Sub einfach Public Sub gemacht habe,
um einer Userform ein Makro zuweisen zu können.
Also nochmals nichts für ungut und danke für deine hoffentlich weitere Hilfe.
Gruß Flodnug
0 Punkte
Beantwortet von
Hallo Flodnug,

[quote]Manchmal kenne ich aber die NM und würde da gern ein Button nutzen.[/quote]
ab und an kommt es auch mal bei mir vor, dass ich auf dem Schlauch stehe. Ich weiß immer noch nicht,
was der Button machen soll. Da muss doch mehr sein als nach dem Eintrag von x eins weiter zu schieben.

[quote]Ich dacht nur das geht relativ einfach, da ich ja schonmal aus Private Sub einfach Public Sub gemacht
habe, um einer Userform ein Makro zuweisen zu können.[/quote]
Ähm, nee! Da hast du bestimmt nur ein normales Makro aus einem Standardmodul aufgerufen. Hier handelt
es sich aber um Ereignisse in deren Parametern Objekte übergeben werden, die für die weitere Bearbeitung
wichtig sind. Wenn du das aus einem Userform aufrufen willst ist Public Sub zwar richtig, aber du müsstest
im Userform-Code den Aufrufbefehl z.B. wie folgt schreiben:
[i]Tabelle1.Workbook_SheetSelectionChange(Sheets("Tabelle1"), Range("C1"))[/i]
Ein solcher Aufruf ist aber nicht nötig, da durch das Verschieben der Zelle durch Buttonklick das
SelectionChange-Ereignis automatisch ausgelöst wird. Um Probleme zu vermeiden empfehle ich dir dazu
den Code aus Antwort 9. Für das Userform reicht hingegen folgender Code völlig aus:
[code]Private Sub CommandButton1_Click()
  ActiveCell.Value = "x"
  ActiveCell.Offset(1, 0).Select
End Sub[/code]Wichtig: Setze die ShowModal-Eigenschaft des Userforms auf False wenn du bei geöffnetem
Userform im Blatt scrollen willst.

Gruß Mr. K.
0 Punkte
Beantwortet von
Mist jetzt hab ich mich auch noch vertan. Der (weiterhin unnötige) Aufrufbefehl müsste so lauten:
Call DieseArbeitsmappe.Workbook_SheetSelectionChange(Sheets("Tabelle1"), Range("C1"))
0 Punkte
Beantwortet von
oder z.B. so:
Call DieseArbeitsmappe.Workbook_SheetSelectionChange(ActiveCell.Parent, ActiveCell.Offset(1, 0))
0 Punkte
Beantwortet von
Hallo xlKing,
daran siehst du, dass ich keine Ahnung von VBA habe.
Ich kann noch nicht mal die richtigen Begriffe benutzen.
Jetzt habe ich nämlich gesehen, wie der Begriff, den ich meinte, richtig heißt - Formularsteuerelement - und nicht Userform.
Ändert sich jetzt dein Verständnis von dem was ich meine/brauche?
Ich entschuldige mich für die Verwirrungen.
Danke und Gruß Flodnug
0 Punkte
Beantwortet von
Leider nicht wirklich. Das Formualarsteuerelement kann Bestandteil eines Userforms sein oder direkt im
Worksheet eingefügt werden. Solltest du den Button also im direkt im Worksheet anlegen, bleibt der Code der
gleiche, nur dass er jetzt im Modul "Tabelle1" angelegt werden muss.
Private Sub CommandButton1_Click()
  ActiveCell.Value = "x"
  ActiveCell.Offset(1, 0).Select
End Sub
Nachteil: Beim Scrollen verschiebt sich auch der Button.
Alternativ kannst du den Code auch in einem Standardmodul als normales Makro anlegen und über ein
Benutzer-Symbol von der Ribbon-Bar oder per Tastenkombination (Shortcut) ausführen. Der Möglichkeiten gibt
es viele, nur den Grund dafür habe ich immer noch nicht verstanden.
...