Hallo Christy ! Mal noch als Frage in Spalte C Datei2 kommen die Parameter immer vor oder kann da auch eine Zeile mit nur Text stehen, also ohne einen Parameter? Unten wäre der Code so wie oben gewünscht. Falls aber in C nur "Hallo" steht und in D ein Parameter ohne Wert, wird die Zeile auch gelöscht. Es bleiben also nur Zeile stehen, in denen was ersetzt wurde ( der Parameter war definiert) oder wo kein Parameter gefunden wurden (weder in C noch in D). Du musst wieder deinen Pfad anpassen / eingeben.
Bei meinem letzten Post war der Code übrigens nicht ganz richtig. Die Liste der zu löschenden Zeilen war nicht sortiert. Das führt ggf. beim Löschen zu ungewünschten Ergebnissen. Ist hier jetzt aber behoben.
Schonmal Guten Rutsch und viele Grüße
Option Explicit
Sub ersetzen()
Dim ziel As String 'die Datei mit dem Code
Dim quelle As String 'die Datei in der ersetz wird
Dim pfad As String 'Pfad zur Datei in der ersetzt wird
Dim suche As String 'der Text der gesucht wird, PARAMETER
Dim ersetz ' Wert die dann eingefügt werden , Spalte 3
Dim ergebnis As Object 'Rückgabewert des Ersetzen
Dim anzparameter As Long 'anzahl von versch. Parameter
Dim i As Long 'Variable zu zählen
Dim j As Long
Dim k As Long
Dim zeilen()
Dim letzter
Dim loschen As String
Dim temp As String
Dim loschen2
Dim posdav
Dim posakt
Dim gefunden As Boolean
'Application.ScreenUpdating = False
ReDim zeilen(0)
zeilen(0) = 0
loschen = ""
ziel = ThisWorkbook.Name
pfad = " " 'noch anpassen
If Right(pfad, 1) <> "\" Then pfad = pfad & "\"
quelle = "Datei2.xlsx"
If ActiveSheet.Cells(1, 1) <> "" Then 'wenn der erste Parameter fehlt nix machen
anzparameter = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 'schauen wieviel Parameter da sind
Workbooks.Open Filename:=pfad & quelle
For k = 3 To 4
For i = anzparameter To 1 Step -1
suche = Workbooks(ziel).Worksheets(1).Cells(i, 1).Value
If suche <> "" Then
ersetz = Workbooks(ziel).Worksheets(1).Cells(i, 5).Value
With Workbooks(quelle).Worksheets(1).Columns(k)
Set ergebnis = .Find(suche, LookIn:=xlValues)
If Not ergebnis Is Nothing Then
letzter = Application.WorksheetFunction.CountIf(Workbooks(quelle).Worksheets(1).Columns(k), "*" & suche & "*")
For j = 1 To letzter
If ersetz = "" Then
temp = Replace(loschen, ergebnis.Row & ";", "")
If Len(temp) = Len(loschen) Then
posdav = 1
posakt = InStr(posdav, loschen, ";")
gefunden = False
While posakt <> 0
If CLng(Mid(loschen, posdav, posakt - posdav)) > ergebnis.Row Then
loschen = Left(loschen, posdav - 1) & ergebnis.Row & ";" & Right(loschen, Len(loschen) - posdav + 1)
posakt = 0
gefunden = True
Else
posdav = posakt + 1
posakt = InStr(posdav, loschen, ";")
End If
Wend
If gefunden = False Then loschen = loschen & ergebnis.Row & ";"
End If
Else
loschen = Replace(loschen, ergebnis.Row & ";", "")
Workbooks(quelle).Worksheets(1).Cells(ergebnis.Row, k) = Replace(Workbooks(quelle).Worksheets(1).Cells(ergebnis.Row, k), suche, ersetz)
End If
Set ergebnis = .FindNext(ergebnis)
Next j
End If
End With
Set ergebnis = Nothing
End If
Next i
Next k
'jetzt löschen
loschen2 = Split(loschen, ";")
For j = UBound(loschen2) To 0 Step -1
Workbooks(quelle).Worksheets(1).Rows(loschen2(j - 1)).Delete
Next j
Application.CutCopyMode = False
Workbooks(ziel).Activate
Workbooks(quelle).Close savechanges:=True
End If 'Code ausführung
Application.ScreenUpdating = True
End Sub
|