Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
844to848
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
844to848
844to848
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Replacement-Zähler einbauen??? Ersetzungen zählen!

Replacement-Zähler einbauen? Ersetzungen zählen!
15.02.2007 13:05:00
Daniel
Hallo liebe Excel-Experten,
Ich habe ein Macro geschrieben, welches Ersetzungen nach einer Liste vornimmt. D.H. in der einen Spalte steht, was ersetzt werden soll und in der anderen Spalte steht womit es ersetzt werden soll. Das Macro sucht nun nach allen möglichen Ersetzungspaaren und ersetzt, wenn eines zutrifft. Die Auswechslungen werden nicht in dem Workbook vorgenommen in dem das Macro steht, sondern in einem anderen Workbook, dessen Dateipfad im laufe des Macros eingelesen wird.
Wenn man die Excel-interne Funktion benutzt wird danach in einer Message Box angegeben wieviele Ersetzungen vorgenommen wurden.
Diese Funktion würde ich in meinem Macro auch gerne einbauen. Ich habe schon viele Versuche gemacht, aber bekomme es einfach nicht hin...
Ich hoffe Ihr könnt mir helfen, ich verzweifle schon.
Vielen Dank!!!
Euer Daniel
Hier mein Code:

Private Sub replace_Click()
'sucht in ausgewähler Datei jeweils die Einträge aus
'suchArray und ersetzt mit ersetzArray
Dim suchArray()
Dim ersetzArray()
Dim k, p As Long
Dim WS As Worksheet
arbeit.Visible = True 'arbeit ist ein bild
'suchArray füllen
For x = 2 To 9999
If IsEmpty("D" & x) Then
GoTo eArray
Else
ReDim Preserve suchArray(x - 1)
suchArray(x - 1) = Range("D" & x)
End If
Next x
'ersetzArray füllen
eArray:
For x = 2 To 9999
If IsEmpty("E" & x) Then
GoTo ersetzen
Else
ReDim Preserve ersetzArray(x - 1)
ersetzArray(x - 1) = Range("E" & x)
End If
Next x
'auf jedem sheet Änderungen vornehmen
ersetzen:
On Error GoTo ausgang
Workbooks.Open Filename:=fn 'fn ist eine globale Variable (wird
'an anderer Stelle mit Dateipfad des Workbooks gefüllt, auf dem
'Änderungen vorgenommen werden)
For Each WS In Worksheets
For k = LBound(suchArray) To UBound(suchArray)
Call WS.UsedRange.replace(suchArray(k), ersetzArray(k), xlWhole, , False)
Next k
Next
arbeit.Visible = False
ausgang:
If arbeit.Visible = True Then
meldung.Text = "ERROR - file not found"
End If
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Replacement-Zähler einbauen? Ersetzungen zählen!
15.02.2007 13:46:56
Rudi
Hallo,
dann musst du die Werte einzeln ersetzen. Ungetestet:

Private Sub replace_Click()
'sucht in ausgewähler Datei jeweils die Einträge aus
'suchArray und ersetzt mit ersetzArray
Dim suchArray
Dim ersetzArray
Dim tmpArray
Dim iCounter As Long
Dim k As Long, i As Long, j As Long
Dim WS As Worksheet
Application.ScreenUpdating = False
arbeit.Visible = True 'arbeit ist ein bild
'suchArray füllen
suchArray = Range(Cells(2, 4), Cells(2, 4).End(xlDown))
'ersetzArray füllen
suchArray = Range(Cells(2, 5), Cells(2, 5).End(xlDown))
'auf jedem sheet Änderungen vornehmen
On Error GoTo ausgang
Workbooks.Open Filename:=fn 'fn ist eine globale Variable (wird
'an anderer Stelle mit Dateipfad des Workbooks gefüllt, auf dem
'Änderungen vorgenommen werden)
On Error GoTo 0
For Each WS In Worksheets
tmpArray = WS.UsedRange
For i = 1 To UBound(tmpArray, 1)
For j = 1 To UBound(tmpArray, 2)
For k = 1 To UBound(suchArray)
If tmpArray(i, j) = suchArray(k) Then
iCounter = iCounter + 1
tmpArray(i, j) = ersetzArray(k)
Exit For
End If
Next k
Next j
Next i
WS.UsedRange = tmpArray
Next WS
MsgBox iCounter & " Ersetzungen vorgenommen."
arbeit.Visible = False
Application.ScreenUpdating = True
Exit Sub
ausgang:
meldung.Text = "ERROR - file not found"
End Sub

Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe
Anzeige
AW: Replacement-Zähler einbauen? Ersetzungen zählen!
15.02.2007 14:06:42
Andi
Hi,
bin zwar nicht der Fragesteller, aber das interessiert mich jetz auch... ;-)
Die Replace-Methode bietet doch die Möglichkeit, mit dem Count-Parameter eine Obergrenze für die Anzahl der durchzuführenden Ersetzungen festzulegen. Folglich müssen die Ersetzungen ja intern mitgezählt werden. Ich hab jetz aber auch keine Möglichkeit gefunden, auf diesen Wert zuzugreifen. Weiß irgendeiner von den Cracks was darüber?
Schönen Gruß,
Andi
AW: Replacement-Zähler einbauen? Ersetzungen zählen!
15.02.2007 16:06:00
Daniel
Hallo,
erstmal vielen Dank für die schnelle Antwort! Leider bekomme ich bei diesem Code einen Runtime Error :(
Ich habe noch einige spezifische Zeilen zugefügt, sollte aber nicht das Problem sein, denn diese blenden nur Bilder ein/aus oder fügen text in eine Inputbox ein.
Der Runtime Error ist laut debugger in der Zeile "If tmpArray(i, j) = suchArray(k) Then".
Ich bin mit meinem VBA-Latein hier leider schon am Ende und weiß daher auch überhaupt nicht, woran das liegen kann. Es handelt sich um den Error '9' (Subscript out of range). Würde mich sehr freuen, wenn mir dabei noch jemand helfen könnte!
Euer Daniel
Hier mein aktueller Code:

Private Sub replace_Click()
'sucht in ausgewähler Datei jeweils die Einträge aus
'suchArray und ersetzt mit ersetzArray
Dim suchArray
Dim ersetzArray
Dim tmpArray
Dim iCounter As Long
Dim k As Long, i As Long, j As Long
Dim WS As Worksheet
Application.ScreenUpdating = False
schlecht.Visible = False
arbeit.Visible = True 'arbeit ist ein bild
erfolg.Visible = False
'suchArray füllen
suchArray = Range(Cells(2, 4), Cells(2, 4).End(xlDown))
'ersetzArray füllen
suchArray = Range(Cells(2, 5), Cells(2, 5).End(xlDown))
'auf jedem sheet die PIDs ändern
On Error GoTo ausgang
Workbooks.Open Filename:=fn 'fn ist eine globale Variable (wird
'an anderer Stelle mit Dateipfad des Workbooks gefüllt, auf dem
'Änderungen vorgenommen werden)
On Error GoTo 0
For Each WS In Worksheets
tmpArray = WS.UsedRange
For i = 1 To UBound(tmpArray, 1)
For j = 1 To UBound(tmpArray, 2)
For k = 1 To UBound(suchArray)
If tmpArray(i, j) = suchArray(k) Then
iCounter = iCounter + 1
tmpArray(i, j) = ersetzArray(k)
Exit For
End If
Next k
Next j
Next i
WS.UsedRange = tmpArray
Next WS
meldung.Text = "changes made"
schlecht.Visible = False
arbeit.Visible = False
erfolg.Visible = True
speichern.Enabled = True
MsgBox iCounter & " Ersetzungen vorgenommen."
Application.ScreenUpdating = True
Exit Sub
ausgang:
meldung.Text = "ERROR - file not found"
End Sub

Anzeige
AW: Replacement-Zähler einbauen? Ersetzungen zählen!
15.02.2007 16:10:09
Rudi
Hallo,
For Each WS In Worksheets
tmpArray = WS.UsedRange
For i = 1 To UBound(tmpArray, 1)
For j = 1 To UBound(tmpArray, 2)
For k = 1 To UBound(suchArray, 1)
If tmpArray(i, j) = suchArray(k, 1) Then
iCounter = iCounter + 1
tmpArray(i, j) = ersetzArray(k, 1)
Exit For
End If
Next k
Next j
Next i
WS.UsedRange = tmpArray
Next WS

Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe
AW: Replacement-Zähler einbauen? Ersetzungen zählen!
15.02.2007 16:52:27
Daniel
:(
Sorry, ich will echt nicht nerven und ich bin super dankbar für deine Hilfe...
Leider gibt es jetzt einen Runtime Error '13' (Type Mismatch) in der Zeile "If tmpArray(i, j) = suchArray(k, 1) Then"
Danke für deine weitere hilfe bei diesem Problem...
Anzeige
AW: Replacement-Zähler einbauen? Ersetzungen zäh
15.02.2007 19:27:45
Rudi
Hallo,
ohne Beispildaten kommen wir nicht weiter.
Gruß
Rudi
Eine Kuh mach muh, viele Kühe machen Mühe.

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige