Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1672to1676
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

Daten aus mehreren Dateien kopieren

Daten aus mehreren Dateien kopieren
08.02.2019 10:54:10
Roman
Hallo zusammen,
ich verwende folgenden angepassten Code. Er funktioniert an sich, aber das Kopieren der Daten _
dauert bei vielen Dateien mehrere Minuten. Hatte vorher einen Code, der sehr schnell war, aber _ die Formate nicht übernommen hat. Könnt ihr euch den Code mal anschauen, ob da etwas nicht korrekt ist bzw. ob man den anpassen kann?

Sub Daten_aus_Protokollen_kopieren()
Dim StatusCalc
'Makrobremsen lösen - Am beginn eine sMakros
With Application
.EnableEvents = False
StatusCalc = .Application.Calculation 'Aktuellen Berechnungsmodus merken
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
Const sXlsPath = "C:\Users\admin\Desktop\Test\" 'Pfad mit Dateien angeben
Const iStartZeile = 4
Const iStartSpalte = 1
Const Zellen = "D3,K3,K7,H34,R3,D5,K5,R5,A29"
Dim oFso As Object, oFile As Object, oWkb1 As Workbook, oWks0 As Worksheet, oWks1 As  _
Worksheet
Dim aCells As Variant, iNextLine As Long, i As Integer
Set oWks0 = ThisWorkbook.ActiveSheet
aCells = Split(Zellen, ","):  iNextLine = iStartZeile
Set oFso = CreateObject("Scripting.FilesystemObject")
ActiveSheet.Range("A4:I1000").ClearContents
For Each oFile In oFso.GetFolder(sXlsPath).Files
If LCase(oFso.GetExtensionName(oFile.Name)) = "xlsx" Then
If ThisWorkbook.Path  oFile.Name Then
Set oWkb1 = Workbooks.Open(oFile.Path)
Set oWks1 = oWkb1.Sheets(1)
For i = 0 To UBound(aCells)
oWks0.Cells(iNextLine, iStartSpalte).Offset(0, i) = oWks1.Range(Trim(aCells( _
_
_
_
i))).Value
Next
oWkb1.Close False
iNextLine = iNextLine + 1
End If
End If
Next
Beenden: 'Sprungadresse zum Beenden diese Makros - nicht mit Exit 

Sub arbeiten!!
'Makrobremsen zurücksetzen - vor dem Beenden eines Makros
With Application
.EnableEvents = True
.Calculation = StatusCalc
.ScreenUpdating = True
End With
End Sub

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten aus mehreren Dateien kopieren
08.02.2019 14:27:53
Piet
Hallo Roman
wo ist denn der frühere Code, vielleicht kann man darin das Format Problem lösen?
mfg Piet
AW: Daten aus mehreren Dateien kopieren
09.02.2019 10:44:13
Roman
Hallo Piet, bin jetzt zwar nicht in der Arbeit und habe somit nicht den angepassten Code, aber das war folgender Code. Hatte es auch versucht bei „With .Cells...“ mit .NumberFormat = "@", dann wird nur der Dateipfad in alle Zellen eingetragen.
Übrigens, bei diesem Code benötige ich nicht, dass der Dateipfad ausgelesen und kopiert/eingefügt wird, habe es aber nicht geschafft ihn dementsprechend anzupassen.
Ich schildere einfach genau, was ich haben möchte: Ich habe einen Ordner mit vielen Dateien, die gleich aufgebaut sind. Nun soll in einer neuen Datei ab Zeile 4 und Spalte 1 mehrere Zellen aus den vielen Dateien aufgelistet werden z. B. die Zellen B3, D3, F3, B6, D6, F6 (der Dateipfad der vielen Dateien soll nicht kopiert/eingefügt werden). Die Formate der kopierten Inhalte sollen dabei erhalten bleiben. Unterordner sollte ich per true / false bestimmen können.
Danke schon mal im Voraus.
Option Explicit
Const strSheetQ As String = "Sheet1" ' Die Tabelle wird ausgelesen
Const strSheetZ As String = "Sheet1" ' Die Tabelle in dieser Datei
Const strCellQ1 As String = "C3" ' Diese Zellen werden ausgelesen
Const strCellQ2 As String = "C6"
Const strCellQ3 As String = "A9"
Const strCellQ4 As String = "B10"
Const strCellQ5 As String = "D11"
Public Sub Files_Read()
Dim stCalc As XlCalculationState
Dim strDir As String
Dim objFSO As Object
Dim objDir As Object
On Error GoTo Fin
With Application
.ScreenUpdating = False
.AskToUpdateLinks = False
.EnableEvents = False
stCalc = .Calculation
.Calculation = xlCalculationManual
.DisplayAlerts = False
End With
Set objFSO = CreateObject("Scripting.FileSystemObject")
strDir = ThisWorkbook.Path ' Datei im gleichen Ordner wie Auswertungsdateien
Set objDir = objFSO.GetFolder(strDir)
'dirInfo objDir, "*.xls", True ' Mit Unterordner
dirInfo objDir, "*.xls"
Fin:
With Application
.ScreenUpdating = True
.AskToUpdateLinks = True
.EnableEvents = True
.Calculation = stCalc
.DisplayAlerts = True
End With
Set objDir = Nothing
Set objFSO = Nothing
End Sub

Public Sub dirInfo(ByVal objCurrentDir As Object, ByVal strName As String, _
Optional ByVal blnTMP As Boolean = False)
Dim objWorkbook As Workbook
Dim strFormula As String
Dim lngLastRow As Long
Dim varTMP As Variant
For Each varTMP In objCurrentDir.Files
If varTMP.Name Like strName And varTMP.Name  ThisWorkbook.Name Then
With ThisWorkbook.Worksheets(strSheetZ)
lngLastRow = IIf(Len(.Cells(.Rows.Count, 2)), _
.Rows.Count, .Cells(.Rows.Count, 2).End(xlUp).Row) + 1
With .Cells(lngLastRow, 2)
.Formula = "='" & Mid(varTMP.Path, 1, _
InStrRev(varTMP.Path, "\")) & "[" & _
Mid(varTMP.Path, InStrRev(varTMP.Path, "\") + 1) & "]" & _
strSheetQ & "'!" & strCellQ1
.Offset(0, -1).Value = varTMP.Name
End With
With .Cells(lngLastRow, 3)
.Formula = "='" & Mid(varTMP.Path, 1, _
InStrRev(varTMP.Path, "\")) & "[" & _
Mid(varTMP.Path, InStrRev(varTMP.Path, "\") + 1) & "]" & _
strSheetQ & "'!" & strCellQ2
End With
With .Cells(lngLastRow, 4)
.Formula = "='" & Mid(varTMP.Path, 1, _
InStrRev(varTMP.Path, "\")) & "[" & _
Mid(varTMP.Path, InStrRev(varTMP.Path, "\") + 1) & "]" & _
strSheetQ & "'!" & strCellQ3
End With
With .Cells(lngLastRow, 5)
.Formula = "='" & Mid(varTMP.Path, 1, _
InStrRev(varTMP.Path, "\")) & "[" & _
Mid(varTMP.Path, InStrRev(varTMP.Path, "\") + 1) & "]" & _
strSheetQ & "'!" & strCellQ4
End With
With .Cells(lngLastRow, 6)
.Formula = "='" & Mid(varTMP.Path, 1, _
InStrRev(varTMP.Path, "\")) & "[" & _
Mid(varTMP.Path, InStrRev(varTMP.Path, "\") + 1) & "]" & _
strSheetQ & "'!" & strCellQ5
End With
.UsedRange.Value = .UsedRange.Value
End With
End If
Next varTMP
If blnTMP = True Then
For Each varTMP In objCurrentDir.SubFolders
dirInfo varTMP, strName
Next varTMP
End If
Set objWorkbook = Nothing
End Sub

Anzeige
AW: Daten aus mehreren Dateien kopieren
09.02.2019 15:09:07
Piet
Hallo Roman
anbei eine Beispieldatei mit deinem Original Makro und meine gekürzte Version. Der Vorteil ist:
in der gekürzten Version kannst du die Quell und Zielzellen selbst anpassen, siehe hier:
.Cells(ZielRow, 1).Formula = "='" & Formel & "$B$3"
Die unednliche lange Formel trifft bis auf die Zell Adresse für alle Formeln zu. Dann kann man sie auch in die Variable Fomeln packen, und muss njur noch die Quell Zelle aendern. Ich denke damit kommst du zurecht, denn das kannst du leicht selbst anpassen. Ich suche auch nicht mehr LastRow, weil du mit Zelle 4 beginnen willst!
Würde mich freuen wenn das so passt, sonst müssen die Kollegen dir weiterhelfen. Bin ab Montag in Urlaub.
mfg Piet
https://www.herber.de/bbs/user/127528.xlsm
Anzeige
AW: Daten aus mehreren Dateien kopieren
10.02.2019 17:26:20
Roman
Hallo Piet,
habe es ausprobiert und das funktioniert wunderbar, sieht sehr sauber aus :) Jetzt würde ich nur noch gerne wissen, ob es möglich ist, dass die Daten kopiert werden und nicht der Pfad der Quellzelle in der Zielzelle steht. Hintergrund ist der, dass ich die Liste z. B. nach dem Auslesen bearbeiten kann. Ach ja und ist es möglich von den Quelltabellen immer nur das erste Tabellenblatt abzufragen? Also statt Sheet1 mit Const strSheetQ As String = "Sheet1" variable Namen der Tabellen, aber immer nur das erste.
Gruß
Roman
AW: geschlossen - s. neuer Thread oWt
10.02.2019 19:52:43
Piet

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige