Hi,
auf Select kann in VBA zu 99% aller Fälle verzichtet werden.
Private Sub worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("F6:F1000")) Is Nothing Then
' Wert = Left(Target.Value, 3)
Sheets("Hilfsblatt") .Cells.ClearContents
With Sheets("02_Objekt")
.Range("A2:J2").AutoFilter Field:=4, Criteria1:="=*" & Wert & "*", Operator:=xlAnd
.Range("J1:J100").Copy
Sheets("Hilfsblatt").Range("J1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
.Range("A2:J2").AutoFilter Field:=4
End With
Application.EnableEvents = False
Target.Offset(0, 1) = Worksheets("Hilfsblatt").Range("J3").Value
Application.EnableEvents = True
End If
End Sub
Was dabei die Zeile Wert = Left(ActiveCell.Value, 3) - ich habe sie geändert und an Target angepasst - dabei soll, entzieht sich allerdings meinem Verständnis.
Ich würde den definierten Namen "Objekt" sich dynamisch an die Anzahl an vorhandenen Daten anpassen lassen:
=Hilfsblatt!$J$3:INDEX(Hilfsblatt!$J$3:$J$1000;ANZAHL2(Hilfsblatt!$J$3:$J$1000);1)
So gewährleistest du, dass keine Leerzeilen in der Liste auftauchen.
Bis später,
Karin