Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1200to1204
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
Inhaltsverzeichnis

Application.Filesearch - Ersatz

Application.Filesearch - Ersatz
Rupert
Hallo liebe Forumgemeinde,
Ich hab folgende codes am laufen, diese habe ich mir Hilfe von diesem Forum erstellt, leider laufen die noch mit application.filesearch. Ich habe schon die diversen Ansätze gesehen von Hajo & Nepomuk, nur leider reicht mein VBA Wissen nicht soweit als das ich dies umsetzen könnte. Ich scheitere zumeist am variablen Ordner.
hier mal Code Nr. 1, welcher aus dem Subfolder "Details-Forecast", alle gefundenen excel Files öffnet und alle Daten aus den gefundenen Excel Dateien ab Zelle A18 in die Ziel-Datei einträgt.
Sub Forecast_einlesen()
ApplicationUpdate = False
Application.Calculation = xlCalculationManual
Selection.AutoFilter 'Setzt den Autofilter zurück!
Range("A17:L17").Select 'Geht zum ersten Feld des Bereiches
Selection.AutoFilter 'Setzt neuen Autofilter, ohne zu selektieren
Dim Datname As Workbook, wksZiel As Worksheet, Monatsdateien() As Workbook
Dim iCounter As Integer, lZeileZiel As Long, wksquelle As Worksheet
Set Datname = ActiveWorkbook
Set wksZiel = Sheets("BASIC_forecasts ")
wksZiel.Select
With Application.FileSearch
.LookIn = ThisWorkbook.Path & "\Details-Forecast"
.SearchSubFolders = False
.Execute msoSortByFileType
.FileType = msoFileTypeExcelWorkbooks
ReDim Monatsdateien(1 To .FoundFiles.Count)
For iCounter = 1 To .FoundFiles.Count
Workbooks.Open Filename:= _
.FoundFiles(iCounter) _
, UpdateLinks:=0
Set Monatsdateien(iCounter) = ActiveWorkbook
Next iCounter
End With
Datname.Activate
With wksZiel
.Range(.Cells(18, 1), .Cells(18, 1).End(xlDown).Offset(0, 11)).ClearContents
lZeileZiel = 18
For iCounter = 1 To UBound(Monatsdateien)
Set wksquelle = Monatsdateien(iCounter).Worksheets(2)
wksquelle.Range(wksquelle.Cells(19, 1), _
wksquelle.Cells(19, 1).End(xlDown).Offset(0, 11)).Copy
'      .Cells(lZeileZiel, 1).PasteSpecial Paste:=xlFormats
.Cells(lZeileZiel, 1).PasteSpecial Paste:=xlValues
lZeileZiel = .Cells(lZeileZiel, 1).End(xlDown).Row + 1
Application.CutCopyMode = False
Monatsdateien(iCounter).Close
Next
End With
ApplicationUpdate = True
Application.Calculation = xlCalculationAutomatic
Range("N19:O19").Select
Selection.Copy
Range("A18:B18").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("PIVOT_Forecast").Select
ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh
End Sub
Leider ist in dieser Datei noch ein zweiter Code eingebaut, der von der vorhandenen Datei und deren Daten mal eine Sicherheitskopie mach und dann eine Datei aus dem Subfolder "Details-Needs" mit Kennzeichen aus einer vorherigen Input-Box (Datum) öffnet und von der geöffneten Datei von Zelle A3 bis zur letzten befüllten Zelle alle Daten kopiert und in die Ziel-Datei einträgt
Sub Needs_einlesen()
Dim Datname As Workbook, datname1 As Workbook
Set Datname = ActiveWorkbook
Sheets("HU_NEEDS_CALCULATION").Activate
ActiveSheet.Unprotect Password:="GJ"
Dim datum As String, datumA As String
datumA = InputBox("Geben sie das heutige Datum ein (dd.mm.yyyy)")
If IsDate(datumA) Then
datum = Format(datumA, "dd.mm.yyyy")
Sheets("HU_NEEDS_CALCULATION").Select
Sheets("HU_NEEDS_CALCULATION").Copy
ActiveWorkbook.SaveAs Filename:= _
ThisWorkbook.Path & "\" & "SICHERUNGSKOPIEN\SICHERUNG_SUM_ETL_WAREHOUSE_" & datum & ". _
xls" _
, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
ActiveWorkbook.Close
Datname.Activate
Rows("2:2").Select
Selection.AutoFilter
Selection.AutoFilter
Range("A3:AL3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
End If
Application.Workbooks.Open ThisWorkbook.Path & "\" & "Details-Needs\HU_NEEDS_" & datum & ".xls"
Set datname1 = ActiveWorkbook
Selection.RemoveSubtotal
ActiveWindow.LargeScroll ToRight:=1
Selection.AutoFilter Field:=37
Range("A3").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Datname.Activate
Range("A3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.AutoFilter Field:=37, Criteria1:="N"
Range("AL1").Select
ActiveCell.FormulaR1C1 = (datum)
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowInsertingColumns:=True, AllowFiltering:=True, Password:="GJ"
datname1.Save
datname1.Close
Call Formel_schreiben
End Sub
Ich hab echt alles probiert nur steige ich mit den neuen Anweisungen wie z.B. objFileSearch nicht durch, bzw. habe zu wenig Ahnung vom Programieren als das ich den Code für meine Verhältnisse umbauen kann.
Vielen dank schon mal für eure Hilfe.
AW: Application.Filesearch - Ersatz
21.02.2011 10:08:23
Hajo_Zi
Hallo Rupert,
warum scheiterst Du bei meinem Beisppiel am dem Ordner, dazu gibt es doch Extra den Dialog zur Abrage.

AW: Application.Filesearch - Ersatz
21.02.2011 10:26:06
Rupert
Hallo Hajo,
Weil ich's nicht versteh wie ich das jetzt in einen Code einbauen soll das es automatisch geht. Also ohne das es die Abfrage öffnet, auf gut deutsch gesagt, genau so wie es hier funktioniert hat.
Aber vielleicht geht es auch nicht im Excel 2007 und höher, dann muss ich halt auf 2003 bleiben, bzw. in den Filialen auf mindestens einen Rechner Excel 2003 installieren.
lg
Rupert
Anzeige
AW: Application.Filesearch - Ersatz
21.02.2011 11:03:52
Hajo_Zi
Hallo Rupert,
lösche die Zeile zum Aufruf des Dialogs und ich glaube StOrdner="C:\Eigene Dateien\ dafür

AW: Application.Filesearch - Ersatz
21.02.2011 12:01:30
Rupert
Hallo Hajo,
Ich will ja den Pfad nicht fixieren sondern
ThisWorkbook.Path
an den Pfad anknüpfen, wo die, von welcher ich das Makro starte, auf dem Server liegt.
Drück ich mich unbeholfen aus?
sorry
lg
Rupert
AW: Application.Filesearch - Ersatz
21.02.2011 12:07:21
Hajo_Zi
Hallo Rupert,
dann schreibe doch StOrdner= ThisWorkbook.Path & "\"
anhängen geht nich als Ordnerbezeichnung darf kein : verwendet werden.
Gruß Hajo
Anzeige
AW: Application.Filesearch - Ersatz
21.02.2011 12:28:32
Rupert
Hallo Hajo,
Ich weiss ja nicht wo ich was machen muss, hab lange zeit gebraucht um mich in den Code einzulesen, den ich vom Forum hatte und ich hab nur wenig Ahnung was wo gemacht wird.
Sorry, aber ich bin in punkto VBA wirklich so unwissend.
lg
rupert
AW: Application.Filesearch - Ersatz
21.02.2011 12:40:54
Hajo_Zi
Hallo Rupert,
dazu in im Code Kommentare wie z.B. Verzeichnis auslen in der Userforum in Zeile 30
StOrdner = GetAOrdner ' Verzeichnis auswählen
und die mußt Du nur ändern und den Teil was Du sonst noch machen willst, öffnen kopieren das mußt anstelle des schreibens in die Zelle machen, den Teil hast Du ja schon.
Gruß Hajo
Anzeige
AW: Application.Filesearch - Ersatz
21.02.2011 13:15:43
Rupert
Hallo Hajo,
Ich hab mir das schon angesehen, weiss aber leider nicht in welchen Teil des Codes ich was ändern müsste - wirklich - ich check das VBA nicht, zumindest nicht wenns um so komplexe Dinge geht.
Ich werde halt auf der Excel 2003 Version bleiben, weil das bekomme ich nicht gebacken.
Ich versteh schon, das mir nicht der gesamte neue Code vorgesetzt werden soll und auch meine grauen Zellen ein bisschen gefordert werden müssen, aber ich check das nicht.
Auf jeden Fall vielen Dank für dein Bemühen
lg
Rupert
AW: Application.Filesearch - Ersatz
21.02.2011 14:56:38
Rupert
Sodalle,
Ich hab mich jetzt mal aufgerafft und mir die ganze Sach nochmals angesehen und es mit folgenden Code geschafft die Dateien zu öffnen
Sub Forecast_einlesen_neu()
'hier beginnt die Vorbereitung
Applicationupdate = False
Application.Calculation = xlCalculationManual
Selection.AutoFilter 'Setzt den Autofilter zurück!
Range("A17:L17").Select 'Geht zum ersten Feld des Bereiches
Selection.AutoFilter 'Setzt neuen Autofilter, ohne zu selektieren
'Vorbereitung abgeschlossen
Dim fs As Object
Dim fo As Object
Dim f As Object
Dim Datname As Workbook
Dim wksZiel As Worksheet
Dim WB As Workbook
Dim iCounter As Integer
Dim lZeileZiel As Long
Dim wksquelle As Worksheet
Set Datname = ActiveWorkbook
Set wksZiel = Sheets("BASIC_forecasts")
Set fs = CreateObject("Scripting.FileSystemObject")
Set fo = fs.GetFolder(ThisWorkbook.Path & "\Details-Forecast")
For Each f In fo.Files
If fs.GetExtensionName(f.Name) = "xls" Then
Set WB = Workbooks.Open(f.Name)
Datname.Activate
WB.Close SaveChanges:=False
End If
Next
End Sub
Das nächste Problem was ich habe ist das alle dateien die geöffnet wurden von A19 bis zur letzten befüllten zelle nach rechts die Daten kopiert werden sollen.
Im alten Code stand an der Stelle von Redim folgendes
ReDim Monatsdateien(1 To .FoundFiles.Count)
For iCounter = 1 To .Folder.Files.Count
Workbooks.Open Filename:=FoundFiles(iCounter), UpdateLinks:=0
Set Monatsdateien(iCounter) = ActiveWorkbook
Wenn ich jetzt davon ausgehe das WB meine "Monatsdateien" sind, wie bringe ich VBA bei, mir die öffnenden Dateien zu zählen, bzw. die per Script geöffneten Datein zu bearbeiten mittels
For iCounter = 1 To UBound(Monatsdateien)
Set wksquelle = Monatsdateien(iCounter).Worksheets(2)
wksquelle.Range(wksquelle.Cells(19, 1), _
wksquelle.Cells(19, 1).End(xlDown).Offset(0, 11)).Copy
.Cells(lZeileZiel, 1).PasteSpecial Paste:=xlValues
lZeileZiel = .Cells(lZeileZiel, 1).End(xlDown).Row + 1
Application.CutCopyMode = False
Monatsdateien(iCounter).Close
Das habe ich noch nicht ganz verstanden, vielleicht hat jemand einen Tip für mich
danke
lg
Rupert
Anzeige
AW: Neuer Ansatz
22.02.2011 09:48:39
Rupert
Hallo Hajo,
Ich hab mir mal das Forum und das Archiv angesehen und einen Ansatz von Beverly gefunden, den ich ein bisschen geändert habe (Anpassungen wegen Worksheet Name etc.) Es funktioniert nur bedingt und ich verstehe nicht wieso. Es werden die Dateien geöffnet, auch alle vorhandenen, aber beim kopieren macht er nicht was ich will, er soll von A19 bis zur letzten befüllten Zelle in Spalte L alle Daten kopieren und in der Tabelle "Basic_forecasts" ab der Zelle A18 einfügen.
Sub mehrere_arbeitsmappen_oeffnen()
Dim strVerzeichnis As String
Dim strDatei As String
Dim strDateiname As String
Dim strTyp As String
Dim lZeileQuelle As Long
Dim lZeileZiel As Long
Dim wksquelle As Worksheet
strTyp = "*.xls"
'Application.ScreenUpdating = False
strVerzeichnis = ThisWorkbook.Path & "\Details-Forecast\"
If Right(strVerzeichnis, 1)  "\" Then strVerzeichnis = strVerzeichnis & "\"
strDateiname = Dir(strVerzeichnis & strTyp)
With ThisWorkbook.Worksheets("BASIC_forecasts")
.Range(.Cells(18, 1), .Cells(18, 1).End(xlDown).Offset(0, 11)).ClearContents
lZeileZiel = 18
'lZeileZiel = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp). _
Row, .Rows.Count) + 1
Do While strDateiname  ""
Workbooks.Open Filename:=strVerzeichnis & strDateiname
With ActiveWorkbook.Worksheets(2)
lZeileQuelle = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End( _
xlUp).Row, .Rows.Count)
.Range(.Cells(19, 1), .Cells(lZeileQuelle, 12)).Copy ThisWorkbook.Worksheets(2). _
Cells(lZeileZiel, 1)
End With
ActiveWorkbook.Close True
strDateiname = Dir
Loop
End With
'Application.ScreenUpdating = True
End Sub

Wie gesagt, er öffnet alle Dateien, aber kopiert nicht alle rein, woran kann es liegen?
vielen Dank vorab
lg
rupert
Anzeige
Ist erledigt - danke für die Hilfe
23.02.2011 12:46:25
Rupert
OT

33 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige