Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Werte mit Doppelklick in eine Zelle eintragen
#1
Hallo VBA-Freunde,

in dem Bereich K23:P50 hole ich mir aus einer anderen Mappe mit einem Sverweis Daten.

nun möchte ich z.B. auf die Zelle K25 einen Doppelklick machen und dabei die Daten welche Daneben stehen in einen anderen Bereich holen, z.B. das Geburtsdatum aus der Zelle M24 in die E21, die Straße aus der N24 in die A24 und so weiter.

Wie müsste der Ansatz dazu lauten?
Ich komme nicht drauf.

Vielen Dank für eure Hilfe schon im voraus.
Es ist nicht genug, zu wissen. Man muss es auch anwenden.
Es ist nicht genug, zu wollen. Man muss es auch tun.
Antworten Top
#2
Hi Heinz,

(25.08.2014, 10:45)Heinz Ulm schrieb: Wie müsste der Ansatz dazu lauten?

ist die Ziel-Zeile und die Ziel-Spalte tatsächlich so willkürlich:
Du doppelklickst in K25, holst den Wert von M24 nach E21 und den von N24 nach A24?

Wie ist das, wenn Du in K30 doppelklickst?

Ich würde prinzipiell so vorgehen:
Makro-Rekorder starten, ein Mal die Aktion durchführen. Nun hast Du schon mal ein Grundgerüst, das Du dann anpassen kannst
  • Zuerst, das Doppelklickereignis nehmen,
  • dann den Bereich der Wirksamkeit einschränken auf den tatsächlich benötigten Bereich:
    Code:
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
       Dim RaBereich As Range                                          ' Variable für überwachten Bereich
       Dim RaZelle As Range                                            ' Variable für Zelle, die zur Zeit bearbeitet wird
       Dim Zeile as Integer                                            ' Variable für Zeilenzahl
       Set RaBereich = Range("K:K") ', D13:D19")                       ' Bereich der Wirksamkeit; nach dem Hochkomma ein weiterer Bereich, dazu ) und ' weglöschen
       Set RaBereich = Intersect(RaBereich, Range(Target.Address))     ' prüfen, ob veränderte Zelle im überwachten Bereich
       If RaBereich Is Nothing Then Exit Sub                           ' keine Zelle im überwachten Bereich
       Application.ScreenUpdating = False                              ' Bildschirmaktualisierung abschalten
       Application.EnableEvents = False                                ' Reaktion auf Eingabe abschalten
       ...
  • dann die aktuelle Zeile ermitteln
    Code:
    Zeile = RaZelle.Row
  • und relativ dazu die zu kopierenden Zeilen und die Spalten in das Makro eintragen
    Hier den aufgezeichneten Code anpassen!
    Code:
    .
             Range("E" & Zeile - 3).Value = Range("M" & Zeile - 1).Value         ' Wert kopieren: M24 nach E21
             Range("A" & Zeile - 1).Value = Range("N" & Zeile - 1).Value         ' Wert kopieren: N24 nach A24
  • "activate" und "select" entfernen
  • ...
Antworten Top
#3
Hallo Ralf,

ich habe mal den Code in einer Testtabelle zusammengebaut um diesen zu testen:

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim RaBereich As Range                                          ' Variable für überwachten Bereich
    Dim RaZelle As Range                                            ' Variable für Zelle, die zur Zeit bearbeitet wird
    Dim Zeile As Integer                                              ' Variable für Zeilenzahl
    Set RaBereich = Range("K:K") ', D13:D19")                       ' Bereich der Wirksamkeit
    Set RaBereich = Intersect(RaBereich, Range(Target.Address))     ' prüfen, ob veränderte Zelle im überwachten Bereich
    If RaBereich Is Nothing Then Exit Sub                           ' keine Zelle im überwachten Bereich
    
    Zeile = RaZelle.Row
  
    Range("E" & Zeile - 3).Value = Range("M" & Zeile - 1).Value         ' Wert kopieren: M24 nach E21
    Range("A" & Zeile - 1).Value = Range("N" & Zeile - 1).Value         ' Wert kopieren: N24 nach A24
End Sub

Bei Zeile =RaZelle.row

bricht mir der Code mit der Fehlermeldung

Laufzeitfehler 91
Objektvariable oder With-Blockvariable nicht festgelegt.

Was muss ich da noch ändern?

Ich werde die kopierte Zeile an einen bestimmten Platz legen und dann die Zellen von dort aus füllen, das geht jetzt auch schon per Button, wenn ich eindeutige Vergleiche habe, bei der Eingabe von Müller Hans können aber verschiedene Müller da sein. Und den richtigen will ich dann per Doppelklick haben.
Es ist nicht genug, zu wissen. Man muss es auch anwenden.
Es ist nicht genug, zu wollen. Man muss es auch tun.
Antworten Top
#4
Hallo Heinz,

ändere die Codezeile mal so ab

Code:
Zeile = Target.Row
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#5
Hallo ihr,

vielen Dank,

mit tarket.row war das Problem gelöst.
Es ist nicht genug, zu wissen. Man muss es auch anwenden.
Es ist nicht genug, zu wollen. Man muss es auch tun.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste