1.5k 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
das in den Code des gewünschten Worksheets eintragen
[code]Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   ActiveCell.Value = "x"
End Sub[/code]

das Ganze erstreckt sich hier auf das gesamte Arbeitsblatt und überschreibt ungefragt
möglich wäre auch eine Beschränkung auf bestimme Zell-Ranges
0 Punkte
Beantwortet von
Hallo vba,
vielen Dank für deine Hilfe.
Es haut alles prima hin, auch mit anderen Buchstaben oder Zahlen.
Damit kann ich zumindest schom mal atbeiten.
Leider funktioniert es nicht, wenn ich das Makro in "Diese Arbeitsmappe" eintrage, sondern nur wenn ich es in das jeweilige Arbeitsblatt eintrage.
Könntest du es bitte so anpassen, dass es im gesamten Arbeitsblatt funktioniert.
Da ich über 40 Arbeitsblätter in der Arbeitsmappe habe, wäre das sehr hilfreich für mich.
Also danke nochmal und Gruß Flodnug
0 Punkte
Beantwortet von
Hallo vba,
ich habe gerade noch etwas festgestellt.
Der Eintrag wird auch vorgenommen, wenn ich die Zelle mit der rechten Maustaste anklicke.
Das soll natürlich nicht sein.
Kann man das so anpassen, das nur bei einem Linksclick der Eintrag vorgenommen wird.
Danke und Gruß Flodmug
0 Punkte
Beantwortet von
für das ganze Workbook:
[code]Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
   ActiveCell.Value = "x"
End Sub[/code]
ob nur links-klick geht weiss ich grad noch nicht, nur Rechts-Klick ginge jedenfalls, oder Doppelklick
"Workbook_SheetBeforeRightClick" / "Workbook_SheetBeforeDoubleClick"
0 Punkte
Beantwortet von
Hallo vba,
vielen Dank für die schnelle Antwort.
Leider komme ich nicht klar - wahrscheinlich "Workbook_SheetBeforeDoubleClick"  falsch rein kopiert.
Ich habe es jeweils in der Zeile vor End Sub, nach Public Sub, mit und ohne Anführungszeichen probiert - vergeblich.
Kannst Du mir bitte das komplette Makro nochmal posten.
Die Variante mit dem Doppelclick finde ich sogar noch besser als nur anclicken.
Danke nochmals und Gruß Flodnug
0 Punkte
Beantwortet von
für den Doppelklick:
[code]Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
   ActiveCell.Value = "x"
End Sub[/code]

bzw Rechtsklick:
[code]Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
   ActiveCell.Value = "x"
End Sub[/code]
0 Punkte
Beantwortet von
Hi,

für nur Linksklick könnte man den Code in DieseArbeitsmappe z.B. so aufbauen:
[code]Dim Inhalt
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  Target = Inhalt
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
  If RButton = False Then
    Inhalt = Target
    Target = "x"
  End If
End Sub[/code]Gruß Mr. K.
0 Punkte
Beantwortet von
Hallo vba, hallo xlking,
habt recht herzlichen Dank für eure Hilfe.
Beide Lösungen funktionieren wunschgerecht.
So kann ich jetzt das Makro bei Bedarf anpassen.
Mir fällt da z. Bsp. als Variante ein, ein kompletten Textbaustein einzufügen.
Also vielen Dank und eine schöne Woche.
Gruß Flodnug
0 Punkte
Beantwortet von
Hi All,

hier noch eine erweiterte Lösungsmöglichkeit, wenn man wirklich nur den Linksklick auf eine einzelne, freie
Zelle auswerten will, ohne bestehende Inhalte zu überschreiben oder Probleme beim Verschieben bzw.
Markieren von Bereichen per Tastatur zu bekommen.

Auch dieser Code gehört in das Modul "DieseArbeitsmappe" und klappt in all meinen Tests hervorragend.
[code]Dim Inhalt, sk As String

Private Sub Workbook_Activate()
  Application.OnKey "{LEFT}", "'DieseArbeitsmappe.Verschieben ""{LEFT}""'"
  Application.OnKey "{UP}", "'DieseArbeitsmappe.Verschieben ""{UP}""'"
  Application.OnKey "{RIGHT}", "'DieseArbeitsmappe.Verschieben ""{RIGHT}""'"
  Application.OnKey "{DOWN}", "'DieseArbeitsmappe.Verschieben ""{DOWN}""'"
  Application.OnKey "{ENTER}", "'DieseArbeitsmappe.Verschieben ""{ENTER}""'"
  Application.OnKey "{RETURN}", "'DieseArbeitsmappe.Verschieben ""{RETURN}""'"
  Application.OnKey "{TAB}", "'DieseArbeitsmappe.Verschieben ""{TAB}""'"
End Sub

Private Sub Workbook_Deactivate()
  Application.OnKey "{LEFT}"
  Application.OnKey "{UP}"
  Application.OnKey "{RIGHT}"
  Application.OnKey "{DOWN}"
  Application.OnKey "{ENTER}"
  Application.OnKey "{RETURN}"
  Application.OnKey "{TAB}"
End Sub

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As
Boolean)
  Target = Inhalt
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
  Inhalt = Target
  If Target.Cells.Count = 1 And ActiveCell.Value = "" And sk = "" Then
    Target = "x" '<-- Hier den Benutzercode angeben
  End If
  
  If sk <> "" Then
    Application.OnKey sk, "'DieseArbeitsmappe.Verschieben """ & sk & """'"
    sk = ""
  End If
End Sub
Sub Verschieben(myKey As String)
  x = 1
  Dim WshShell As Object
  Set WshShell = CreateObject("WScript.Shell")
  
  Application.OnKey myKey
  WshShell.SendKeys IIf(myKey = "{RETURN}", "{ENTER}", myKey), True
  sk = myKey
End Sub[/code]Gruß Mr. K.
0 Punkte
Beantwortet von
Hallo,
ich muß mich leider nochmal melden.
Könnt ihr mir noch sagen, wie die erste Zeile geändert werden muß, damit ich einer Userform das Makro zuweisen kann.
Aus Private Sub einfach Public Sub machen funktioniert leider nicht, wie es an anderer Stelle früher schon mal geklappt hat.
Danke und Gruß Flodnug
...