Registriert seit: 16.04.2014
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.
Registriert seit: 10.04.2014
Version(en): 2016 + 365
25.08.2014, 12:55
(Dieser Beitrag wurde zuletzt bearbeitet: 25.08.2014, 13:03 von Rabe.)
Hi Heinz,
(25.08.2014, 11: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
- 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
- ...
Registriert seit: 16.04.2014
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.
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo Heinz,
ändere die Codezeile mal so ab
Gruß Stefan
Win 10 / Office 2016
Registriert seit: 16.04.2014
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.