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

Auslesen einer Datei und schreiben in Neue

Auslesen einer Datei und schreiben in Neue
30.07.2019 15:49:57
Steve

Moin Leute
ich habe gedacht, das eure bisherige Hilfe
(Ich danke an dieser Stelle noch einmal dafür)
ausreicht um mit dem Problem fertig zu werden. Leider habe ich mich geirrt.
Ich beschreibe mal das Problem.
Ich habe die Datei "001" = Das ist die Zieldatei
Die Arbeitsdateien sind 002,003 usw.
Diese werden täglich befüllt und dann in 001 zusammengetragen.
Jede Datei enthält ein Sheet "Eingabe"
Jedes Sheet eine dynamische Tabelle mit Namen Tabelle(Dateiname ohne Nullen)
- Beispiel: (Datei= 001 / Sheet= "Eingabe" / dynamische Tabelle= Tabelle1) USW.
Ich möchte nun aus allen Dateien größer 001 die dynamische Tabelle auslesen,
diese an das untere Ende der Tabelle von 001 kopieren, die Kopierte Tabelle löschen,
aus der Headline von Tabelle1 eine neue Tabelle generieren,
die Datei speichern und schließen.
Beispiel:
Öffne 002 - kopiere Tabelle2 an das untere Ende von Tabelle1 in Datei 001.
Lösche Tabelle2, generiere Tabelle2 aus Tabelle1 neu , Speicher 002 und schließen
Zwei Dinge sind nun zu beachten.
1. Das Makro muss selber prüfen wieviele Dateien es überhaupt gibt.
- Ich hoffe das geht, da diese ja fortlaufend nummeriert sind.
2. die Tabellengröße ist variabel in Länge und Breite.
- Es wäre schön wenn die Tabelle aus 001 neu in das entsprechende Sheet als dynamische Tabelle kopiert werden kann um so sicherzustellen, das spätere Änderungen mit der Eingabe am nächsten Tag übernommen werden.
Kann mir da jemand wohl bei helfen?
Das wäre wirklich super.
Was ich bisher habe ich nämlich wirklich wenig.
Liebe Grüße
Steve

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Mein bisheriger Stand
30.07.2019 15:54:44
Steve
Dies sind meine bisherigen Ergebnisse.
Sub TEST()
Dim strPfad As String
strPfad = ThisWorkbook.Path
Workbooks.Open strPfad & "\002.xlsx"
Range("Tabelle2").Copy
Windows("001.xlsm").Activate
Range("Tabelle1[[LFSNR ]]").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("002.xlsx").Activate
Application.CutCopyMode = False
Range("Tabelle2").Delete Shift:=xlUp
ActiveWorkbook.Save
ActiveWindow.Close
End Sub

Den Punkt zwei schaffe ich vielleicht sogar selber. Ich habe vorhin rumprobiert. Wenn ich alles bis auf die Spalte A lösche und dann die Headline der Tabelle aus 001 reinkopiere, baut er immer die Tabelle neu auf und bleibt trotzdem eine dynamische Tabelle. Ich sende das Ergebnis morgen.
Liebe Grüße
Steve
Anzeige
hier mal eine Variante
31.07.2019 17:19:14
Tino
Hallo,
kannst mal diese Variante versuchen.
Code kommt in die Datei 001.xlsm oder 001.xls
Option Explicit
Option Compare Text
Sub Start()
Dim sPath$, sDir$, sTabName$
Dim ArFiles(), i%, j%
Dim booSave As Boolean
Dim rngData As Range, rngZiel As Range, oWS As Worksheet
'Pfad wo die Dateien liegen mit \ am ende
sPath = ThisWorkbook.Path
sPath = sPath & IIf(Right$(sPath, 1)  "\", "\", "")
'Dateien suchen
sDir = Dir$(sPath & "?.xls?", vbNormal)
Do While sDir  ""
If sDir  ThisWorkbook.Name Then
If IsNumeric(Left$(sDir, InStrRev(sDir, ".") - 1)) Then
ReDim Preserve ArFiles(i)
ArFiles(i) = sPath & sDir
i = i + 1
End If
End If
sDir = Dir$()
Loop
If i = 0 Then 'nix gefunden
MsgBox "Keine Datei gefunden!", vbExclamation
Exit Sub
End If
On Error GoTo ErrorHandler:
With Application
.ScreenUpdating = False
.DisplayAlerts = False
.Calculation = xlCalculationManual
End With
For i = LBound(ArFiles) To UBound(ArFiles)
With Workbooks.Open(ArFiles(i), False, False)
sTabName = Left$(.Name, InStrRev(.Name, ".") - 1)
If IsNumeric(sTabName) Then sTabName = CInt(sTabName)
sTabName = "Tabelle" & sTabName
For j = 1 To .Worksheets.Count
If .Worksheets(j).Name = sTabName Then
With .Worksheets(j)
Set rngData = .UsedRange
End With
End If
If Not rngData Is Nothing Then
If oWS Is Nothing Then
With ThisWorkbook
Set oWS = .Worksheets.Add(After:=.Worksheets(.Worksheets.Count))
End With
End If
With oWS
Set rngZiel = .Cells(.Rows.Count, 1).End(xlUp)
If rngZiel.Row > 1 Or rngZiel.Value  "" Then
Set rngZiel = rngZiel.Offset(1)
End If
rngData.Copy rngZiel
rngZiel.Value = rngZiel.Value 'evtl. Formel durch Werte esetzen
End With
Set rngData = Nothing
Set rngZiel = Nothing
'Tabelle neu erstellen
.Worksheets(j).Delete
.Sheets("Tabelle1").Copy After:=.Sheets(.Sheets.Count)
.ActiveSheet.Name = sTabName
booSave = True
Exit For
End If
Next
.Close booSave
booSave = False
Set rngData = Nothing
End With
Next
ErrorHandler:
With Application
.ScreenUpdating = True
.DisplayAlerts = True
.Calculation = xlCalculationAutomatic
End With
If Err.Number  0 Then
MsgBox Err.Description, vbCritical, "Fehler"
Else
MsgBox "Aufgabe durchgeführt!" & vbCr & _
"Es wurden " & UBound(ArFiles) + 1 & " Dateien bearbeitet und" & vbCr & _
"nach " & oWS.Name & " kopiert!", vbInformation
End If
End Sub
Gruß Tino
Anzeige
AW: hier mal eine Variante
01.08.2019 12:59:27
Steve
Hallo Tino,
zunächst einmal vielen Dank für deine Hilfe. Leider erhalte ich folgende Fehlermeldung:
Objektvariable oder With-Blockvariable nicht festgelegt.
Ich habe das Makro in die 001.xlsm eingefügt und versucht auszuführen. Leider stoppt der Durchlauf ohne zu markieren wo der Fehler auftritt.
Zwei weitere Fragen habe ich wohl noch:
Muss ich hier noch den Pfad eingeben oder ist der Kommentar nur eine Erläuterung?
Die Dateien 002,003 etc. befinden sich alle in demselben Ordner (und sind xlsx).
'Pfad wo die Dateien liegen mit \ am ende
sPath = ThisWorkbook.Path
sPath = sPath & IIf(Right$(sPath, 1) "\", "\", "")
Leider verstehe ich die Anweisung eventuell Formel durch Anweisungen zu ersetzen nicht. Kannst du Bitte sagen was damit gemeint ist?
rngZiel.Value = rngZiel.Value 'evtl. Formel durch Werte esetzen
Gruß Steve
Anzeige
AW: hier mal eine Variante
01.08.2019 13:06:54
Steve
Eine Frage habe ich noch
ich habe folgendes gefunden:
Loop
If i = 0 Then 'nix gefunden
MsgBox "Keine Datei gefunden!", vbExclamation
Exit Sub
End If
Verstehe ich das richtig, wenn keine Datei gefunden wird, dann wird das Makro beendet, da es nichts zum übertragen gibt?
Versuche gerade den Text zu verstehen. Muss zugeben, das hätte ich nicht einmal mit lange rumprobieren hinbekommen.
Steve
AW: hier mal eine Variante
01.08.2019 13:29:20
MCO
Hallo Steve!
Wenn

i= 0 
bleibt, ist der Pfad falsch oder keine Datei da. Daher ist die Fehlermelung richtig und es gibt nix zu tun. --> EXIT
Du musst dir mal die Zeit nehmen und im einzelsatz das Makro durchgehen. Dann wirst du vieles besser verstehen.
Gruß, MCO
Anzeige
AW: hier mal eine Variante
02.08.2019 12:59:15
Steve
Moin MCO,
danke für deinen Hinweis. Dann habe ich es also richtig verstanden. Ich werde deinen Tipp beherzigen. Das meiste verstehe ich meistens. Leider fällt es mir schwer selber ein Makro zu schreiben.
Ich bin aktuell dabei mithilfe eines Handbuchs und eurer Hilfe meine Kenntnisse zu erweitern um nicht immer wieder nach Hilfe Bitten zu müssen. Aber manchmal stoße ich noch an meine Grenzen.
Vor allem dann wenn es etwas komplizierter wird.
Liebe Grüße
Steve
AW: hier mal eine Variante
01.08.2019 13:39:21
Tino
Hallo,
habe dir hier meine Testdateien hochgeladen.
Zip-File entpacken und im Ordner die Datei 001.xlsm starten und auf den Button drücken.
https://www.herber.de/bbs/user/131205.zip
Gruß Tino
Anzeige
AW: hier mal eine Variante
02.08.2019 12:54:52
Steve
Hallo Tino,
ich danke dir für deine Datei.
Ich glaube ich habe mich bei meiner Anfrage falsch ausgedrückt.
Ich versuche es nochmal:
Mehrere Mitarbeiter geben Daten in eine eigene Datei ein. Das sind die Dateien 002,003 etc.
Der Vorgesetzte sammelt die Dateien in der Datei 001 in einer Tabelle.
(also untereinander und ohne Wiederholung der Überschriften.)
(Im Idealfall ist das eine dynamische Tabelle- da später Auswertungen darüber laufen sollen.)
Im Anschluss werden die Dateien 002,003 etc geleert.
Am Tag drauf füllen die Mitarbeiter ihre Dateien wieder.
Der Vorgesetzte greift wieder diese Daten ab.
Diese werden dann aber an das untere Ende der Tabelle in 001 eingefügt.
Die Datei 001 wächst also mit jedem Tag während alle anderen Dateien jeden Tag geleert werden.
nach dem leeren der Dateien 002,003 etc. soll nun überprüft werden ob sich die Tabelle geändert hat
da es sein kann, das der Vorgesetzte ein Kriterium hinzugefügt hat.
Beispiel:
Im Monat 1 hat die Tabelle 4 Spalten.
Im Monat 2 sind es fünf
Im Monat 3 nur drei
Dein Makro erkennt zwar jede existierende Datei, aber was mich verwundert ist, das die Dateien (nicht 001) mehr als einen Sheet haben in denen Daten stehen.
Vielen Dank für deine Hilfe
Liebe grüße
Steve
Anzeige
habe leider keine Zeit mehr ...
02.08.2019 15:05:06
Tino
Hallo,
habe leider keine Zeit mehr mich damit zu befassen!
Muss die Frage auf offen stellen!
Gruß Tino
AW: Auslesen einer Datei und schreiben in Neue
02.08.2019 19:14:56
Peter
Hallo Steve,
das von Dir geschilderte Problem ist leider nicht ganz einfach zu lösen. Vor allem muss zunächst mal geklärt werden, wie die Dateien der Mitarbeiter (Datei 002, 003, usw.) organisiert sind. Soweit ich es verstanden habe:
1.) Die Anzahl der Mitarbeiter-Dateien ist variabel, sie liegen jedoch alle im selben Ordner
2.) In jeder Mitarbeiter-Datei existiert nur 1 Arbeitsblatt für die Eingaben.
3.) Auf den Arbeitsblättern der Mitarbeiter taucht eine variable Anzahl von Spalten auf.
Fragen: Ist die Bezeichnung der Spalten festgelegt und ist deren Anzahl endlich? Richtet der Mitarbeiter die Spalten (und damit die Überschriften) selbst ein? Vermutlich gibt es auch eine Textspalte ganz links, wenn ja, was steht dort drin? Kommt vielleicht irgendwo der Name des Mitarbeiters vor (oder u. U. eine Nr.) und soll diese(r) in der dynamischen Tabelle (Datei 001) auftauchen?
4.) In der dynamischen Tabelle sollen die Mitarbeiter-Eingaben spaltengerecht untereinander abgestellt werden.
Frage: Sind hier evtl. weitere Ordnungskriterien (nach denen sortiert werden soll) erforderlich?
5.) Die Mitarbeiter-Eingaben sollen bis auf die zuletzt gebrauchten Überschriften gelöscht werden.
Fragen: Wäre hier nicht eine zuvor erstellte Sicherungskopie angebracht? In welchen Zeitintervallen erfolgen die Aufzeichnungen?
Gut wäre es, wenn Du das Schema einer Mitarbeiter-Datei hochladen könntest.
Mit freundlichem Gruß
Peter Kloßek
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige