Supportnet / Forum / Skripte(PHP,ASP,Perl...)
Excel VBA: FileSearch - Problem
Frage
Hallo zusammen,
ich habe ein Problem, das vmtl. im Zusammenhang mit FileSearch auftritt.
Hintergrund: Ich durchlaufe mit FileSearch nacheinander ein paar Ordner, deren Pfad ich aus einer separaten Tabelle hole und suche dabei nach .xls-Tabellen, die bestimmte Voraussetzungen erfüllen.
Diese Dateien kopiere ich dann in einen gemeinsamen Ordner.
Wenn Dateien mit gleichem Namen auftreten, benenne ich die
ältere der Dateien um in "_Alt_Datum_...[i]Dateiname[/i].
In der fett markierten Zeile bekomme ich einen Laufzeitfehler
[quote]
Laufzeitfehler '-2147467259 (80004005)':
Automatisierungsfehler
Unbeannter Fehler
[/quote]
Interessant ist auch, dass wenn ich die xls-Datei schließe, in der das Makro steckt, die Nachfrage kommt, ob die Änderungen in den Dateien, die das Makro zuvor "gelesen" hat, gespeichert werden sollen. (?!)
Das sind die meiner Meinung nach wichtigsten Zeilen des Codes:
[code]
With Application.FileSearch
.NewSearch '--> auf Standardeinstellungen setzen
.LookIn = strPfadnameAktuell
.SearchSubFolders = True
.Filename = oWSBearbeitung.Cells(25, 2)
.MatchTextExactly = True
.FileType = msoFileTypeAllFiles
If .Execute() > 0 Then
.
.
.
For lDateiZaehler = 1 To .FoundFiles.Count
VDatumAktuelleDatei = FileDateTime(.FoundFiles(lDateiZaehler))
[b]
Set oWBExtern = GetObject(.FoundFiles(lDateiZaehler))
[/b]
[/code]
In der obenstehenden Zeile tritt wie gesagt der Fehler auf. Ich definiere hier die Datei als oWBExtern und lese im Anschluß daraus den Dateinamen und den Pfad (über .name und .path). Diese Info verwende ich dann anschließend für die Dateioperationen.
[code]
' bestehende Datei umbenennen
Name strDateiAlt As strDateiNeu
[/code]
Hat jemand eine Idee, wo der Fehler liegen könnte bzw. vielleicht gibt es ja eine einfachere Lösung, mit der man das Problem "umschiffen" kann?
Für Eure Hilfe im voraus vielen Dank!
Antwort 1 von nighty
hi snailhouse
2 tips
gruss nighty
name einer datei
pfad der datei ist in der variable
2 tips
gruss nighty
name einer datei
Dir(.FoundFiles(lDateiZaehler ))pfad der datei ist in der variable
strPfadnameAktuellAntwort 2 von snailhouse
Hallo nighty,
vielen Dank für den Tipp.
Das hat mir ein Stück weitergeholfen, allerdings bekomme ich über strgPfadnameAktuell nur den Grundpfad, in meiner Suche berücksichtige ich aber auch Unterordner.
Nun habe ich es folgendermaßen gelöst:
d.h. ich hole über .item den Dateiname mit Pfad und schneide anschließend den Dateinamen aus dem string raus.
Due Kopierfunktion habe ich folgendermaßen gelöst (dann tritt auch nicht das Problem auf, dass die Dateien irgendwo im Hintergrund, aber nicht sichtbar , geöffnet werden.
Mit FileCopy traten ebenfalls Probleme auf..:
Trotzdem nochmals Danke für die Hilfe!
vielen Dank für den Tipp.
Das hat mir ein Stück weitergeholfen, allerdings bekomme ich über strgPfadnameAktuell nur den Grundpfad, in meiner Suche berücksichtige ich aber auch Unterordner.
Nun habe ich es folgendermaßen gelöst:
strPfadAktuell = Application.FileSearch.FoundFiles.Item(lDateiZaehler) ' Pfad mit Dateiname
strDateiNameAktuell = Dir(.FoundFiles(lDateiZaehler)) ' Dateiname
strPfadAktuell = Left(strPfadAktuell, (Len(strPfadAktuell) - Len(strDateiNameAktuell))) ' Dateiname aus Pfad herausschneiden
d.h. ich hole über .item den Dateiname mit Pfad und schneide anschließend den Dateinamen aus dem string raus.
Due Kopierfunktion habe ich folgendermaßen gelöst (dann tritt auch nicht das Problem auf, dass die Dateien irgendwo im Hintergrund, aber nicht sichtbar , geöffnet werden.
Mit FileCopy traten ebenfalls Probleme auf..:
' Benötigte API-Deklaration für Kopierfunktion
Private Declare Function CopyFile Lib "kernel32" _
Alias "CopyFileA" ( _
ByVal lpExistingFileName As String, _
ByVal lpNewFileName As String, _
ByVal bFailIfExists As Long) As Long
.
.
.
' Neue Kopierfunktion "DateiKopieren", Aufruf wie in VBA FileCopy
Public Function DateiKopieren(ByVal sSourceFile As String, _
ByVal sDestFile As String, _
Optional ByVal bAlwaysOverwrite As Boolean = True) As Boolean
Dim nResult As Long
nResult = CopyFile(sSourceFile, sDestFile, CLng(Abs(Not bAlwaysOverwrite)))
DateiKopieren = (nResult <> 0)
End Function
.
.
.
public sub DasEigentilicheMakro
.
DateiKopieren strPfadAktuell & strDateiNameAktuell, strAusgabePfad & strDateiNameAktuell
.
end sub
Trotzdem nochmals Danke für die Hilfe!

