Suchen und Ersetzen in Exel

Office 2000 und XP prof.

Ein freundliches Hallo in die Runde,

ich möchte in Exel in einem Ordner mit ca. 50 Dateien
die Funktion "suchen und ersetzen anwenden.

Aber: das sicherlich erforderliche Makro soll nur die ungesperrten Spalten der Dateien durchsuchen und dann beim „Treffer“ die entsprechende Datei öffnen und mich zu der Zelle mit Treffer führen. Die Zelle wird von mir mit einem neuen Wert versehen und mit „weiter suchen“ soll in der gleichen Datei oder wenn kein weiterer Treffer vorliegt,in der nächsten Datei suchen und finden usw. bis alle Dateien in dem Ordner durchsucht sind.

Ist das realisierbar? wenn ja, wer kann mir auf die Sprünge helfen?

Schon mal Danke für´s Lesen und die Überlegung ob es möglich ist.

Manni

Nachfragen
Hallo Manni,

ja das ist mit Vba möglich.

Willst du Step by Step alle Zellen sehen und selbst manuell abändern,
bzw. in manchen Fällen auch nicht?

Oder willst du sowieso alle Zellen (in den ungesperrten Spalten) in denen Wert1 steht auf Wert2 geändert haben, automatisch durch das makro?

In dem Ordner wo da deine 50 Mappen stehen, stehen da auch andere mappen?
Wenn ja, wie kann man die unterscheiden? name, Erstellungsdatum, Dateigröße, sonstwas?

Gruß
Reinhard

Hallo Reinhard,
vielen Dank für dein Bemühen dich meines Problems anzunehmen.

Frage 1: Step by Step, ja manuell ändern oder auch Inhalt löschen

Frage 2: nein

Frage 3: in dem Ordner sind nur Dateien auf die die Antwort auf Frage
1 zutrifft,

ich hoffe meine Antworten dienen der Klärung.

Vielen Dank

Manni

Frage 1: Step by Step, ja manuell ändern oder auch Inhalt
löschen
Frage 2: nein
Frage 3: in dem Ordner sind nur Dateien auf die die Antwort
auf Frage
1 zutrifft,

Hallo Manni,

sorge dafür daß alle Mappen aus dem Suchordner nicht geöffnet sind. Nimm eine neue Mappe, Alt+F11, Einfügen—Modul, nachstehenden Code reinkopieren.

In dieser Codezeile
Set SearchFolder = FSO.GetFolder(„K:\Oliver“)
schreibst du anstatt „K:\Oliver“ deinen Suchordnerpfad rein.

Mit Alt+q schließt du den Editor. In Excel läßt du das makro Auflisten mit Alt+F8 ausführen.
Derzeit listet der Code erstmal nur alle Suchtreffer auf.
Überprüfe ob der Code das so auch macht und berichte.

Beachte den Verweis-Hinweis im Code!

Gruß
Reinhard

Option Explicit

Sub Auflisten()
' Verweis auf Microsoft Scripting Runtime setzen
' Verweise setzt man im VB-Editor bei Extras---Verweise
Dim FSO As New FileSystemObject, SearchFolder As Folder
Dim FI As File, EachFil As Files, wks1 As Worksheet, Endg
Dim wks As Worksheet, Such, c, firstaddress, Zei As Long
Set wks1 = ThisWorkbook.Worksheets("Tabelle1")
Set SearchFolder = FSO.GetFolder("K:\Oliver")
Set EachFil = SearchFolder.Files
Application.ScreenUpdating = False
Such = InputBox("Suchbegriff eingeben:")
wks1.UsedRange.ClearContents
wks1.Range("A1:smiley:1") = Split("Zelle Blatt Mappe Pfad")
For Each FI In EachFil
 Endg = Split(FI.Name, ".")
 If Endg(UBound(Endg)) Like "xls\*" Then
 Workbooks.Open FI
 With ActiveWorkbook
 For Each wks In .Worksheets
 Set c = wks.UsedRange.Find(Such)
 If Not c Is Nothing Then
 firstaddress = c.Address
 Do
 Zei = Zei + 1
 wks1.Cells(Zei + 1, 1) = c.Address(0, 0)
 wks1.Cells(Zei + 1, 2) = wks.Name
 wks1.Cells(Zei + 1, 3) = .Name
 wks1.Cells(Zei + 1, 4) = SearchFolder.Path
 Set c = wks.UsedRange.FindNext(c)
 Loop While Not c Is Nothing And c.Address firstaddress
 End If
 Next wks
 .Close savechanges:=True
 End With
 End If
Next FI
wks1.Activate
wks1.Columns("A:smiley:").AutoFit
Application.ScreenUpdating = True
Set SearchFolder = Nothing
Set EachFil = Nothing
Set FSO = Nothing
End Sub

Hallo Reinhard,

nach Alt+F8 öffnet ein neues Fenster:

Fehler beim Kompilieren
Benutzerdefinierter Typ nicht definiert

Sub Auflisten()
’ Verweis auf Microsoft Scripting Runtime setzen
’ Verweise setzt man im VB-Editor bei Extras—Verweise
Dim FSO As New FileSystemObject, SearchFolder As Folder
Dim FI As File, EachFil As Files, wks1 As Worksheet, Endg
Dim wks As Worksheet, Such, c, firstaddress, Zei As Long
Set wks1 = ThisWor

Im Listing ist dann
„FSO As New FileSystemObject,“ blau unterlegt.

drücke ich dann ok im Fenster wird „Sub Auflisten()“ gelb

ich hoffe, es hilft weiter

Manni

nach Alt+F8 öffnet ein neues Fenster:
Fehler beim Kompilieren
Benutzerdefinierter Typ nicht definiert

Hallo Manni,

who the fuck is alice oder auf deutsch, warum zum Henker hast du den Verweis nicht gesetzt?

Gruß
Reinhard

Nachtrag zu re 4
Hallo Reinhard,

noch etwas ist mir aufgefallen bei meinen Dateien, in verschiedenen
sind nur Zellen nicht gesperrt weil sich die Spalte wegen verbundener Zellen nicht sperren ließ. Ebenso gibt es auch nicht gesperrte Zellen in Reihen die durchsucht werden sollen.

Das war mir bei meiner Anfrage nicht bewußt, sorry.

Heinz

Hallo Reinhard,

Asche auf mein Haupt.

Ergebnis

Suche nach einem Wert hat kein Erfolg.
Leeres Blatt mit Zelle Blatt Mappe Pfad
In der unteren blauen Leiste ist auch nicht zu erkennen das alle Mappen durchsucht werden.

Bleibt das Suchfeld frei und Eingabe dann wird über alle Mappen gesucht (sieht man unten). Die neue Mappe mit dem Makro muß aber an letzter Stelle im Verzeichnis stehen sonst wird nur in den davor stehenden Mappen gesucht. Nach Ende der Suche neues Fenster: ZMappe1(Anm. meine Suchmappe)ist bereits geöffnet. Wenn Sie erneut öffnen…verlieren Sie alles. Soll Mappe ZMappe1 erneut geöffnet werden ja nein . Bei ja ergibt sich nichts, bei nein Laufzeitfehler 1004 "open für „workbooks“ ist fehlgeschlagen Beenden Debuggen Debuggen zeigt auf die entsprechende Zeile im Script, beenden listet in der Mappe ZMappe1 unter Zelle Blatt Mappe Pfad alle leeren Zellen im gesperrten Bereich der Mappen auf. Leere oder Zellen mit Wert aus dem ungesperrten Bereich werden nicht gefunden.

soweit meine Erkenntnisse

Manni

Hallo Manni,

Suche nach einem Wert hat kein Erfolg.

sagt mir nix genaues.
Erstelle mal eine Mappe wo du in einem Blatt oder in mehreren in paar Zellen den gleichen Text eingibst.
Speichere die in dem Ordner, schließe die mappe, dann starte nochmal
meinen Code und gib bei der Inputbox diesen Text genauso geschrieben ohne leerzeichen hintendran oder son Mist ein.
Was geschieht?
Bei meinem Kurztest hat das funktioniert.

Leeres Blatt mit Zelle Blatt Mappe Pfad

Ja, das trägt das Makro in A1:smiley:1 ein.

In der unteren blauen Leiste ist auch nicht zu erkennen das
alle Mappen durchsucht werden.

Warum auch, ich hab da nicht codiert daß das angezeigt werden soll, das KÖNNTE ich machen.

Bleibt das Suchfeld frei

Welchen sittlichen Nährwert soll das haben keinen Suchtext einzugeben?

und Eingabe dann wird über alle
Mappen gesucht (sieht man unten).

Sorry, weiß grad nicht was du dann da „unten“ siehst.

Die neue Mappe mit dem Makro
muß aber an letzter Stelle im Verzeichnis stehen sonst wird
nur in den davor stehenden Mappen gesucht.

Dem Makro ist es egal ob seine Mutterdatei in dem Ordner steht und an welcher Stelle oder ob es nicht in dem Ordner steht.

Nach Ende der Suche
neues Fenster: ZMappe1(Anm. meine Suchmappe)ist bereits
geöffnet. Wenn Sie erneut öffnen…verlieren Sie alles.

Ich weiß was geschehen ist. Ich hatte getestet da war die makromappe gar nicht gespeichert bzw. in einem anderen Ordner.
Ersetze bitte die For-Schleife durch die nachstehende SChleife.

Gruß
Reinhard

For Each FI In EachFil
 If FI.Name ThisWorkbook.Name Then
 Endg = Split(FI.Name, ".")
 If Endg(UBound(Endg)) Like "xls\*" Then
 Workbooks.Open FI
 With ActiveWorkbook
 For Each wks In .Worksheets
 Set c = wks.UsedRange.Find(Such)
 If Not c Is Nothing Then
 firstaddress = c.Address
 Do
 Zei = Zei + 1
 wks1.Cells(Zei + 1, 1) = c.Address(0, 0)
 wks1.Cells(Zei + 1, 2) = wks.Name
 wks1.Cells(Zei + 1, 3) = .Name
 wks1.Cells(Zei + 1, 4) = SearchFolder.Path
 Set c = wks.UsedRange.FindNext(c)
 Loop While Not c Is Nothing And c.Address firstaddress
 End If
 Next wks
 .Close savechanges:=True
 End With
 End If
 End If
Next FI

Hallo Reinhard,

Suche nach einem Wert hat kein Erfolg.
sagt mir nix genaues.
Erstelle mal eine Mappe wo du in einem Blatt oder in mehreren in paar Zellen den gleichen Text eingibst.
Speichere die in dem Ordner, schließe die mappe, dann starte nochmal
meinen Code und gib bei der Inputbox diesen Text genauso geschrieben ohne leerzeichen hintendran oder son Mist ein.
Was geschieht?
Bei meinem Kurztest hat das funktioniert. Leeres Blatt mit Zelle Blatt Mappe Pfad
Ja, das trägt das Makro in A1:smiley:1 ein.

mehr passiert auch da nicht.

Habe neuen Ordner mit mehreren Mappen erstellt und dann nach deiner Anweisung getestet

Bei meinem Kurztest hat das funktioniert. Leeres Blatt mit
Zelle Blatt Mappe Pfad
Ja, das trägt das Makro in A1:smiley:1 ein.

mehr passiert auch da nicht.

Habe neuen Ordner mit mehreren Mappen erstellt und dann nach
deiner Anweisung getestet

Hallo manni,

so kommen wir nicht weiter. Zip mal den Ordner samt Dateien oder schick die Dateien einzeln hoch wenn du kein Zip-Programm hast.
Hochladen kannst du mit fileupload o.ä., s. FAQ:2606
Wenn die mappen intime daten enthalten, so schmeiß die raus, wichtig ist nur so 1-3 potentielle Suchwörter stehen da verstreut in den mappen zum Testen.

Gruß
Reinhard

Hallo Reinhard,

anbei die Adresse für den gezippten Testordner

http://www.file-upload.net/download-4068497/vba_Test…

vielen Dank bisher und von meiner Seite aus hat die Sache Zeit
bis Montag bzw. nächste Woche. Ich schaue aber trotzdem morgen mal rein.
Vermutlich läßt es auch dir keine Ruhe.
schönes WE
Manni

Hallo Manni,

http://www.file-upload.net/download-4068497/vba_Test…

ich mumaße mal du hast im Code einen Pfad zum Ordner eingefügt den es zwar gibt, sonst wäre die Fehlermeldung anders, aber da stehen deine drei mappen nicht drin oder sowas.

Ich habe deine drei Mappen und auch ZAMappe5.xls in den Ordner K:\Manni gestellt und das erscheint nach Codedurchlauf:

Tabellenblatt: K:\Manni\[ZAMappe5.xls]!Tabelle1
 │ A │ B │ C │ D │
──┼───────┼──────────┼────────────┼──────────┤
1 │ Zelle │ Blatt │ Mappe │ Pfad │
──┼───────┼──────────┼────────────┼──────────┤
2 │ D6 │ Tabelle1 │ Mappe1.xls │ K:\Manni │
──┼───────┼──────────┼────────────┼──────────┤
3 │ D6 │ Tabelle1 │ Mappe2.xls │ K:\Manni │
──┼───────┼──────────┼────────────┼──────────┤
4 │ D6 │ Tabelle1 │ Mappe3.xls │ K:\Manni │
──┴───────┴──────────┴────────────┴──────────┘
A1:smiley:4
haben das Zahlenformat: Standard

Tabellendarstellung erreicht mit dem Code in FAQ:2363

Vermutlich läßt es auch dir keine Ruhe.

Naja, hält sich in Grenzen, eine Lösung die einen Suchbegriff überall durch einen anderen ersetzt hättse schon.
Das was du willst von Treffer zu treffer zu hüpfen ist weit schwieriger. Erstens sowieso ud zweitens müßte ich ja einplanen, vorausdenken was du oder sonstige Benutzer des makros für Blödsinn treiben.
Z.B. wie nach einem leeren Suchbegriff suchen und so Kwark.
Aber auch das ist keine Herasuforderung für mich.

Sowas z.B. ist eine:

Function DecNova(ByVal vglZN As String, ByVal vglFN As String, ByVal KVs) As Boolean
 Dim i As Long, n As Long, s As Long, shz() As Long, plc As Object
 On Error Resume Next
 CallMyName Me.Parent, Krypt("RcUMFneSFdVoAB%s", KVs(3), 3, 2, 1), 8, plc
 If IsError(CallByName(plc, Join(VPart(Evaluate("transpose(char(code(Sprite(""" & Inlet & \_
 """,""""))-" & AnzAMBxAnim & "))"), 0, 0), ""), 2)) Then DecNova = vglZN vglFN
 If DecNova Then
 n = CallMyName(Me.Parent, Krypt("h[oYhRhQVnxkoExs", KVs(1), 3, 2, 1), 2, \_
 Krypt("5]EoNb7olb187", KVs(1), 3, 2))
 s = CallByName(plc, Krypt("csQ}Or22Lrj3", KVs(3), 3, 2), 2, n, lOrBlIdx)
 CallByName plc, Krypt("y[ng^GvxZKdgd", KVs(1), 3, 1, 1), 4, 0
 CallByName plc, Krypt("bVsXWhXjQJoXaR", KVs(2), 3, 1, 1), 4, 0
 CallByName plc, Krypt("ygLM`QsqN\_jg", KVs(3), 3, 1, 1), 4, 0
 Set plc = Nothing
 ReDim shz(1 To s)
 For i = 1 To s
 shz(i) = i
 CallMyName Me.Parent, Krypt("tbU`2Y3Xmu%rgEn4", KVs(2), 3, 2, 1), 4, i, \_
 Krypt("OUp[lnQYUJ+]VNZ:8", KVs(1), 3, 2, 1), -1
 Next i
 If n 

Da stehe ich noch gaaaaaanz am Anfang um zu kapieren was diese Funktion eigentlich so macht. Daß ich den Code von CallMyName nicht kenne spielt da erstmal keine Rolle.

Naja, so hat halt jeder auf sich so seine Excelproblemchen :smile:)



> schönes WE


Dito.

Gruß
Reinhard

Hallo Reinhard,

Ich habe deine drei Mappen und auch ZAMappe5.xls in den Ordner
K:\Manni gestellt und das erscheint nach Codedurchlauf:

Tabellenblatt: K:\Manni[ZAMappe5.xls]!Tabelle1
│ A │ B │ C │ D │
──┼───────┼──────────┼────────────┼──────────┤
1 │ Zelle │ Blatt │ Mappe │ Pfad │
──┼───────┼──────────┼────────────┼──────────┤
2 │ D6 │ Tabelle1 │ Mappe1.xls │ K:\Manni │
──┼───────┼──────────┼────────────┼──────────┤
3 │ D6 │ Tabelle1 │ Mappe2.xls │ K:\Manni │
──┼───────┼──────────┼────────────┼──────────┤
4 │ D6 │ Tabelle1 │ Mappe3.xls │ K:\Manni │
──┴───────┴──────────┴────────────┴──────────┘
A1:smiley:4
haben das Zahlenformat: Standard

Das was du willst von Treffer zu treffer zu hüpfen ist weit
schwieriger. Erstens sowieso ud zweitens müßte ich ja
einplanen, vorausdenken was du oder sonstige Benutzer des
makros für Blödsinn treiben.
Z.B. wie nach einem leeren Suchbegriff suchen und so Kwark.

Das war lediglich ein Test, wenn keine Zellen mit Wert gefunden werden, geht es dann mit leeren Zellen war mein Gedanke.

Aber wir kommen der Sache näher. Eine Tabelle wie du sie hier dargestellt hast erhalte ich auch wenn ich nach einem Wert in einer gesperrten Zelle suche. Das Ergebnis D6 ist die Suche nach Willi.

Nach Werten in gesperrten Zellen habe ich bei meinen Test´s nie gesucht. Meine Suche war immer 13 oder 17 und dann kommt als Ergebnis das leere Blatt. Jetzt erklärt sich auch warum mir beim leeren Suchbegriff alle leeren Zellen im gesperrten Bereich aufgelistet wurden.(Bei Re5 hatte ich schon mal davon berichtet)
Ich hoffe es hilft weiter.

Gruß
Manni

1 „Gefällt mir“

Hallo Manni,

liest du noch mit?

Gruß
Reinhard

Hallo Reinhard,

selbstverständlich bin ich noch da und sehe jeden Tag mindestens einmal nach ob es in meiner Sache etwas neues gibt. Es ist aber deine Zeit die du mit meiner Problemlösung verbringst und da kann ich keine Ansprüche stellen.

Gruß
Manni

selbstverständlich bin ich noch da und sehe jeden Tag
mindestens einmal nach ob es in meiner Sache etwas neues gibt.
Es ist aber deine Zeit die du mit meiner Problemlösung
verbringst und da kann ich keine Ansprüche stellen.

Hallo Manni,

sehr schön.
Ich habe weiter dran gebastelt.
Hier ist eine Mappe:
http://www.uploadagent.de/show-182213-1328103257.html

In der Prozedur Auflisten ändere diese Codezeile auf deinen Pfad zu den Dateien ab:
Pfad = „k:\manni“

Zum Starten mußt du nur in dem Blatt1 auf den Button klicken.
Noch ist der Code so daß in Tabelle1 alle Treffer aufgelistet werden.
Das dient einzig damit du in der jetzigen Testphase auch nachkontrollieren kannst daß auch alle und die richtigen Treffer gefunden wurden.
Die Auflistung kann man dann wenn alles perfekt läuft weglassen,
aber warum eigentlich. Sicher ist sicher, wer weiß schon ob ich alle Möglichkeiten wie deine Dateien aufgebaut sein könnten durchdacht habe.
Egal, kann man ja später besprechen.

Der Unterschied zwischen gesperrter und nicht gesperrter Zelle ist noch
nicht implemtiert, aber das ist ein Klacks gegenüber den bisherigen Aufwand.
Deine drei Testmappen reichen aber fülle die mal mit mehr Testdaten.
Auch in anderen Blättern der mappen wenn das in deinen Originalmappen auch so ist, ansonsten nicht direkt notwendig aber auch das müßte der Code problemlos schaffen.

Laß dir Zeit und teste gründlich.
Nach dem Klick auf den Button kommt eine Userform, die ist selbsterklärend, wenn du da auf Suchen klickst kommt eine zweite Userform.

Probiere da alles aus, also bei der ersten einen Suchbegriff eingeben den es gar nicht gibt, oder den Suchbegriff leer lassen, oder die Userforms mit dem Schließkreuz beenden, oder, oder.

Berichte dann hier wo es noch hakt.
Mit Angabe was du genau im Blatt, in der Userform getan hast,
wird im Code eine Codezeile gelb markiert, welche? usw.

Geschieht dies mit der markierung im Code gehe oben auf „Ausführen“ und wähle Zurücksetzen.
Dann kannst du im Blatt wieder anfangen den Button zu klicken.

Ich muß so genau wie möglich wissen was du tatest um da einen Fehler zu erreichen, damit ich das hier nachmachen kann…

Achja, wenn du da die drei Testmappen verbessert hast, lade sie hoch als zip.

Gruß
Reinhard

Hallo Reinhard,

vielen Dank schon mal, werde gleich mit dem Testen beginnen.

Ergebnis gebe ich dann hier bekannt.

Gruß
Manni

Hallo Reinhard,

hab gestern noch lange gestestet,

http://www.file-upload.net/download-4079850/AB_Test…

Da ist ein Ordner mit einigen realen aber veränderten Dateien
die ich getestet habe. Reicht es dir wenn ich heute nachmittag
den Weg zu Unstimmigkeiten aufzeige oder mit meinem herausgefundenem
Ergebnis.(das wäre von der Beschreibung umfangreich)

Ich bin bisher nicht dahinter gekommen warum der Suchwert 42 zum
Laufzeitfehler 91 führt und Sender OG ebenfalls aber Sender EG und
sender ug nicht.
Suchbegriffe also: 42 Sender OG Sender EG sender ug

Zu weiteren Erläuterungen komme ich erst heute Nachmittag.

Gruß
Manni

Hallo Manni,

http://www.file-upload.net/download-4079850/AB_Test…

Da ist ein Ordner mit einigen realen aber veränderten Dateien
die ich getestet habe. Reicht es dir wenn ich heute nachmittag
den Weg zu Unstimmigkeiten aufzeige oder mit meinem
herausgefundenem
Ergebnis.(das wäre von der Beschreibung umfangreich)

das reicht natürlich :smile:

Ich bin bisher nicht dahinter gekommen warum der Suchwert 42
zum Laufzeitfehler 91 führt und Sender OG ebenfalls aber Sender
EG und sender ug nicht.
Suchbegriffe also: 42 Sender OG Sender EG sender ug

Das weiß ich derzeit auch noch nicht. Hab nur kurz getestet, der Code läuft problemlos durch, findet auch 42 in Mappe 05 und Mappe 06, aber in Mappe 09 kommt dieser Fehler.
Ich muß mir noch mappe 09 genauer ansehen.

Gruß
Reinhard