Wie kann man in Excel VBA ermitteln, ob der Benutzer in eine bereits aktive Zelle geklickt hat?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Ich bin mir fast sicher, dass Du dazu auch kein Ereignis finden wirst.
Wenn ich nochmal EINFACH in die aktive Zelle klicke, passiert ja auch einfach nichts. Ich gehe davon aus, dass selbst "im Innersten" von Excel dieser Klick einfach ignoriert wird.
Ich frage mich allerdings, WAS Du damit bewirken willst. Wieso sollte der User nochmal in die aktive Zelle klicken.
In die Zelle DOPPELklicken, macht Sinn und wird durch:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
abgefangen.
DAS brauch ich auch öfter, und mit:
Cancel = True
kann man auch verhindern, dass der Curser in der Zelle bleibt.
Kannst Du DAS nicht nutzen?

21

Ok, das wäre vielleicht noch eine Option, mit Doppelklick.
Die Funktion die ich damit abbilden will ist einfach: Der Benutzer klickt nochmal in das Feld und teilt damit Excel mit, daß es die Referenz, die über dem Wert in dem Feld abgebildet wird anspringen soll.
Muß ich dem Benutzer halt klarmachen, daß er in so einem Fall doppelklicken soll und daß kein Einfachklick reicht, wie bei allen anderen Feldern.

0
52
@maxbreak

Meiner Erfahrung nach ist in so einem Fall ein Doppelklick auf jeden Fall besser, weil DER nicht so schnell "aus Versehen" passiert.
Wenn es unbedingt ein einfacher Klick sein soll, dann fordere den User auf in die Referenz zu klicken, die über dem Wert steht. Das kannst Du dann mit dem einfachen Change-Ereignis abfangen.
Oder Du machst es ganz aufwendig und baust CommandButtons in oder neben die Zellen.

0
21
@Oubyi

Gerne, ich habe noch eine weitere Möglichkeit gefunden: Man springt die Referenz an, wenn er das Feld mit Alt + LinkeMaus anklickt.
Vermutlich werde ich es so machen, weil bei Doppelklick ist es manchmel etwas fummelig und außerdem ist eigentlich Doppelklick für das Editieren des Zellinhalts direkt in der Zelle gedacht.

0
21
@maxbreak

Hier die entsprechende Funktion für die Abfrage ob die Alt-Taste gedrückt ist. Bzw. wenn der Cursor schon im Feld steht, muß man Alt-Doppelklick dürcken:

' Prueft ob die Alt-Taste gedrueckt ist
Public Function CheckTasteAlt() As Boolean
  If GetKeyState(&HA4) < 0 Or GetKeyState(&HA5) < 0 Then CheckTasteAlt = True
End Function

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If CheckTasteAlt = True Then
    ' todo: Referenz anspringen
  End If
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Call Worksheet_SelectionChange(Target)
End Sub
0
52
@maxbreak

Ist eine interessante Sache.
Allerdings fehlt mir in Excel 2010 die Funktion
GetKeyState().
Entweder ist die obsolet, oder eine zusätzliche UDF?!

0
21
@Oubyi

Oh sorry, das habe ich vergessen zu posten, muß man in dem Modul deklarieren:

Declare Function GetKeyState Lib "user32.dll" (ByVal nVirtKey As Long) As Integer
0
52
@maxbreak

Ah so, das ist eine sogenannte API-Funktion.
Die werde ich mir merken, kann man bestimmt mal gebrauchen.
Allerdings sollte man mit APIs vorsichtig umgehen.
Danke fürs Kompliment ☼

0

Die Aktive Zelle heißt einfach ActiveCell und umfasst im Gegensatz zu Selection , das einen Bereich umfassen KANN (nicht muss!), nur eine Zelle. Die ActiveCell ist diejenige, die bei der Auswahl anders markiert ist als die übrigen.
Du kannst ihre Unterpunkte so abrufen: ActiveCell.Address (external:=True) oder Activecell.interior.Colorindex oder ActiveCell.FormulaLocal oder einfach ActiveCell.Value

Klickst Du aber in diese Zelle, "öffnest" Du sie also, dann tut kein Makro mehr, auch verschiedene andere Aktionen, wie Öffnen vom Explorer aus oder Erstellen einer Textfeldes gehen nicht -unabhängig von VBA. Viele Menüpunkte sind dann grau hinterlegt, also inaktiv. Isso in xl!

Excel VBA - Zelle auswählen, dann F2

Hallo erneut Excel-Freunde,

mein Titel verrät es bereits. Eine Zelle soll markiert werden, daraufhin soll "F2" und dann "Enter" gedrückt werden.

Mein Makro sieht bisher so aus:

'Ans Ende der Tabelle springen

ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Select

ActiveCell.Offset(1, 0).Select

' Eingabeaufforderung 1 Datum

Eingabe = InputBox("Bitte Datum angeben, wann die Ware eingetroffen ist!" & Chr(13) & Chr(10) & Chr(13) & Chr(10) & _ "Bitte schreiben Sie in: tt:mm:jjjj" & Chr(13) & Chr(10) & _ "" & _ "", _ "Zugang [Datum]", ActiveSheet.Range("B1") _ & "_", 7000, 5000)

If StrPtr(Eingabe) = 0 Then ' MsgBox ("Die Schaltfläche Abbrechen wurde gewählt. Der Vorgang wird abgebrochen.") End Else

End If

ActiveCell.Offset(0, 0).Value = Eingabe

Wie man sieht, sucht er sich selbst die letzte Zelle in meiner Tabelle um dort mit einer Eingabeaufforderung das Datum anzugeben.

Nun möchte ich als nächsten Schritt, genau diese Zelle, wo man eben das Datum eingegeben hat mittels dem Makro da oben, ... das er diese Zelle auswählt, "F2" und dann "Enter" drückt.

Alle Versuche dies zu bewerkstelligen, schlugen bisher fehl.

Habt ihr eine Idee?

Viele Grüße,

David :) ... Pixelschubster :D

...zur Frage

CSV am Ende einer Exceltabelle einfügen?

Hi,

folgendes Szenario: Ich bekomme in unterschiedlichen Zeitabständen CSV Dateien die ich in Excel importieren möchte. An sich ist das ja kein Problem. Jedoch möchte ich den ganzen Schritt automatisieren und die Daten der CSV an das Ende einer formatierten Tabelle setzen. Hat folgenden Hintergrund: Ich möchte über die Daten der CSV Dateien mehrere Auswertungen laufen lassen. Diese müssen nur einmal angelegt werden und danach immer über alle Daten aus allen CSVs laufen. Die Daten aus den CSV Dateien werden einmalig Importiert, also sind keine Dateiverbindungen nötig. Mein erster Gedankengang war ein Excelsheet "Import" in welches ich die Daten lade und dann per Makro ans ende der Tabelle schiebe. Doch da war mein Problem ein VBA-Skript zu schreiben welches immer an die nächste freie Stelle die Daten kopiert. Eventuell gibt es ja auch eine einfachere Lösung und ich finde Sie nicht. Ich habe Excel2016 im Einsatz und keine Einschränkungen in Sachen Makros. Zudem ist es eine 64bit Version welches die Verarbeitung großer Makros relativ zügig funktioniert.

Vielen Dank im Voraus für alle Antworten

Grüße

...zur Frage

Suchen / Ersetzen in VBA?

nachdem ich durch per Dialog den Benutzer nach Jahreszahl "JJJJ" und Bereich gefragt habe,

    Dim JJJJminus2, JJJJminus1, JJJJ As Double    
    Dim Zelle As Range    Dim Bereich As Range
    Dim s As String
' Range markieren
    s = ActiveCell.Address
    Set Bereich = Application.InputBox _
    ("Wählen Sie den Bereich, den Sie bearbeiten möchten", Type:=8)
    Range(s).Select

und der Benutzer 2016 als Jahreszahl eingegeben und den betreffenden Bereich markiert hat, möchte ich jetzt, dass in dem Bereich die Jahreszahlen sukzessive geändert werden:

'
' akt. Jahr "JJJJ" für Ersetzungen einlesen
    JJJJ = InputBox("Jahr eingeben, vier Ziffern", "Jahr")
    JJJJminus1 = JJJJ - 1
    JJJJminus2 = JJJJ - 2

und zwar so: JJJJminus1 in JJJJ und JJJJminus2 in JJJJminus1

wie muss dieses Stück VBA-Code dazu aussehen?

...zur Frage

Per Button Wert erhöhen in Excel VBA - Offset Funktion?

Hallo ihr Lieben,

mal wieder bin ich dabei, für die Arbeit ein Excel-Sheet zur Erleichterung zu basteln.

Diesmal möchte ich eigentlich etwas recht Simples: Per Buttonklick auf - oder + soll der Wert einer Zelle entweder um 1 erhöht oder verringert werden. Die betroffene Zelle steht in jeder Zeile zwischen den zwei Buttons (siehe Screenshot). Um nicht für jeden Button eine eigene Funktion schreiben zu müssen, wollte ich hier mit Offset der Zelle, in der der Button liegt, arbeiten, aber irgendwie bekomme ich es syntaktisch nicht hin und bitte deswegen um Rat, wie ich das realisieren kann.

Würde mich freuen, wenn jemand die Lösung für mich hat. Vielen Dank bereits im Voraus!

Lg Lego

...zur Frage

Makro mit if-Abfrage nach Knopfdruck?

Hallöchen ihr Lieben! Ich probiere grade ein bisschen mit VBA etc in Excel rum und möchte folgendes Problem lösen: Ich habe bereits zwei Comboboxen erstellt. In der einen soll der aktuelle Monat ausgewählt werden, in der anderen der erste Tag des Monats. Die beiden Werte werden in je eine Zelle übertragen. Nach einem Knopfdruck soll der Wert der Zellen geprüft werden. Angenommen, der Monat wäre der April und der erste Tag ein Freitag. Dann soll ein Programm automatisch das Datum in die richtige Zelle in die Tabelle eintragen (am ersten Freitag den 01.04., am Samstag den 02.04. etc). Die Wochentage stehen immer in einer Zeile, in der Zeile darunter soll das entsprechende Datum erscheinen, dann bleiben 4 Zeilen frei für Einträge und dann kommt wieder eine Zeile mit Wochentagen usw. Um meine Frage zu spezifizieren:

  1. Wie trage ich anhand von Makros ein Datum in eine Zelle ein?
  2. Wie kann ich dieses Datum automatisch fortführen lassen?
  3. Wie überspringe ich dabei Zeilen?
  4. Wie mache ich das Datum abhängig vom ausgewählten Monat?
  5. Wie lege ich die Startzelle fest?

Ich weiß, das ist eine Menge, aber ich wäre sehr dankbar, wenn sich jemand die Zeit nimmt und versucht mir zu helfen. Ich möchte keine fertige Lösung, Denkanstöße, damit ich das Problem selber lösen kann, wären super!!!

Danke!!!

...zur Frage

In Excel mit Visual Basic Zellen leeren

Hallo zusammen,

ich würde gerne über Visual Basic, wenn eine bestimmte if Bedingung erfüllt ist (bekomme ich hin), einen Zellbereich leeren (Formatirung soll erhalten bleiben, also nur Hintergrundfarbe und Inhalt löschen), z.B. 2B bis 6E. Kann mir jemand hierbei helfen? Ich weiß leider weder wie ich eine Aktion für einen Zellbereich ausführe (es werden mehrere Zellbereiche werden) noch weiß ich, wie ich über Visual Basic Zellen leeren kann.

Gruß

...zur Frage

Was möchtest Du wissen?