Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1596to1600
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Worksheet Ereignis

VBA Worksheet Ereignis
19.12.2017 00:39:20
Shayev
Hallo zusammen,
ich versuche ein Makro zu schreiben, welches über das Eregnis eines Tabelleblattes mit Find aus meiner Masterliste mir die entsprechenden Daten in das Tabellenblatt mit dem Ereignis einfügt. Eigentlich ein SVERWEIS, da die Datei etwas größer wird (mehrere Tabellenblätter mit vielen SVERWEISEN) wird diese entsprechend aufgrund der Formeln automatisch langsamer(das umschalten auf die manuelle Berechnung möchte ich vermeiden). Mein Code sieht wie folgt aus:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet, rng As Object, ws2 As Worksheet
Dim lastrow As Integer, c As Integer, lastrowws As Integer
Application.ScreenUpdating = False
Set ws = ActiveSheet
lastrow = ws.Range("B1048576").End(xlUp).Row
If Intersect(ActiveCell, Range("B1:B" & lastrow)) Is Nothing Then
c = Target.Row
lastrowws = Tabelle2.Range("C1048576").End(xlUp).Row
Set rng = Tabelle2.Range(Tabelle2.Cells(4, 4), Tabelle2.Cells(lastrowws, 4)).Find(what:= _
Target.Value, LookAt:=xlWhole)
If Not rng Is Nothing Then
ws.Cells(c, 3) = Tabelle2.Cells(rng.Row, 4)
Else
End If
End If
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub

Leider bekomme ich in der Zeile mit Find eine Fehlermeldung--> Anwendungs - oder objektdefinierter Fehler! Weiß vielleicht jemand woran es liegen kann?
Vielen Dank im Voraus und Viele Grüße
Shayev

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Worksheet Ereignis
19.12.2017 01:36:49
Werner
Hallo,
sorry, aber das ist etwas wirr.
Ich bin mal von folgendem ausgegangen:
-du gibst in BlattA in Spalte B Werte ein
-den eingegebenen Wert willst du in BlattB in Spalte D suchen
-bei Fund den Wert aus BlattB Spalte E in BlattA Spalte C ausgeben
das wäre der von dir beschriebene SVERWEIS
Das lässt sich einfach dadurch erledigen, dass du per Code eine SVERWEIS-Formel in BlattA in der jeweiligen Zelle in Spalte C einträgst und dann die Formel durch den entsprechende Wert ersetzt.
Ich habe die Formel jetzt mal mit WENNFEHLER ergänzt, für den Fall, dass der Suchbegriff nicht gefunden wurde.
Teste mal:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim loLetzteQ As Long, loLetzteZ As Long
If Target.Column  2 Then Exit Sub
If Target.Count > 1 Then
MsgBox "Keine Mehrfacheingabe zulässig."
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Exit Sub
End If
loLetzteZ = Cells(Rows.Count, 2).End(xlUp).Row
loLetzteQ = Worksheets("Tabelle2").Cells(Worksheets("Tabelle2").Rows.Count, 4).End(xlUp).Row
If Not Intersect(Range("B1:B" & loLetzteZ), Target) Is Nothing Then
If Target.Value = "" Then
Target.Offset(, 1).ClearContents
Else
Target.Offset(, 1).FormulaR1C1 = _
"=IFERROR(VLOOKUP(RC[-1],Tabelle2!RC[1]:R[" & loLetzteQ & "]C[2],2,FALSE),""nicht  _
gefunden"")"
Target.Offset(, 1).Value = Target.Offset(, 1).Value
End If
End If
End Sub
Gruß Werner
Anzeige
Einige Ungereimtheiten
19.12.2017 01:45:57
Luc:-?
Morrn, Shayev;
• Set ws = ActiveSheet ist in einer EreignisProzedur des Blattes Quatsch, denn sie reagiert ja nur dann auf Ereignisse, wenn sie in ihrem Blatt auftreten, das dann natürlich das aktive ist. ws kannst du also einsparen und stattdessen ggf Me. verwenden, was sich auf dieses Blatt bezieht.
• ActiveCell ist ebenfalls Quatsch, denn Target ist hier ursprünglich die aktive(n) ÄnderungsZelle(n).
• Das dürfte aber wohl den Fehler nicht beseitigen, weshalb du auf dieser Zeile einen HaltePkt setzen und den aktuellen Wert von lastrowws überprüfen solltest!
Gruß, Luc :-?
„Die Intelligenzmenge ist auf diesem Planeten eine Konstante, die Bevölkerung nimmt aber zu!“ Auch deshalb informieren mit …
Anzeige
AW: Einige Ungereimtheiten
19.12.2017 08:05:46
Shayev
Hallo Luc,
Vielen Dank für deine Tips, im Nachhinein nachgedacht macht es natürlich Sinn :)! Lastrows gibt mir schon den richtigen Wert aus, deswegen kann ich es mir leider nicht erklären, warum ich eine Fehlermeldung erhalte.
VG, Shayev
Änderung o.w.T.
19.12.2017 01:57:03
Werner

Private Sub Worksheet_Change(ByVal Target As Range)
Dim loLetzteQ As Long, loLetzteZ As Long
If Target.Column  2 Then Exit Sub
If Target.Count > 1 Then
MsgBox "Keine Mehrfacheingabe zulässig."
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Exit Sub
End If
loLetzteZ = Cells(Rows.Count, 2).End(xlUp).Row
loLetzteQ = Worksheets("Tabelle2").Cells(Worksheets("Tabelle2").Rows.Count, 4).End(xlUp).Row
If Target.Column = 2 And Target.Value = "" Then Target.Offset(, 1).ClearContents
If Not Intersect(Range("B1:B" & loLetzteZ), Target) Is Nothing Then
If Target.Value  "" Then
Target.Offset(, 1).FormulaR1C1 = _
"=IFERROR(VLOOKUP(RC[-1],Tabelle2!RC[1]:R[" & loLetzteQ & "]C[2],2,FALSE),""nicht  _
gefunden"")"
Target.Offset(, 1).Value = Target.Offset(, 1).Value
End If
End If
End Sub

Anzeige
AW: Änderung o.w.T.
19.12.2017 08:14:11
Shayev
Hallo Werner,
Vielen Dank, der Code macht genau das, was ich möchte! Ich versuche mit Vöookup einen dynamischen Matrixbezug zu erzeugen, leider bekomme ich eine Fehlermeldung! Beispielhaft fängt meine Matrix in A1 an und hört bei D mit dynamischen Zeilen auf,ich habe deinen Code wie folgt angepasst : R1C1:R&loletzteQC4. Komme im Moment nicht auf die Idee woran der Fehler liegen könnte.?
VG, Shayev
Beispielmappe bitte
20.12.2017 08:14:33
Werner
Hallo,
da sind einige Fragen:
-wo stehen deine Suchbegriffe für den SVERWEIS (Blatt, Spalte von bis)
-wo ist deine Ergebnisspalte (Blatt, Spalte)
-wo ist deine Suchmatix (Blatt, Spalte von bis)
-welche Spalte der Suchmatrix soll das Ergebnis liefern
Am besten machst du eine kleine Beispielmappe und lädst die hier hoch.
Gruß Werner
Anzeige
AW: Beispielmappe bitte
20.12.2017 09:16:35
Shayev
Hallo Werner,
vielen Dank für die Rückmeldung. Ich habe den Code jetzt wie folgt angepasst:
Target.Offset(, 1).FormulaR1C1 = _
"=IFERROR(VLOOKUP(RC[-1],Tabelle2!R5C2:R[" & loLetzteQ & "]C3,2,FALSE),""nicht gefunden"")"
Ich bekomme genau das was ich möchte.
Vielen Dank und Viele Grüße
Shayev
Gerne u. Danke für die Rückmeldung. o.w.T.
20.12.2017 10:12:39
Werner

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige