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

Tabellen in einer Tabelle sammeln, inkl. Formatier

Tabellen in einer Tabelle sammeln, inkl. Formatier
17.01.2017 20:42:15
Christian
Hallo zusammen,
Ich füge alle Exceltabellen aus einem Verzeichnis in einer Tabelle zusammen. Leider werden die Formatierungen nicht übernommen. Ich brauche Hilfe.
Mein Code:
Option Explicit
Sub MWTabellenAusMehrerenDateienEinlesen()
Dim oTargetSheet As Object
Dim oSourceBook As Object
Dim sPfad As String
Dim sDatei As Long
Dim lErgebnisZeile As Long
Dim s As Long
Dim z As Long
Application.ScreenUpdating = False 'Das "Flackern" ausstellen
GetMoreSpeed (True) ' Startet mdl_beschleunigung ***
'Bevor kopiert wird, muss die Tabelle "Übersicht" ab Zeile 5 gelöscht werden.
With Worksheets("Übersicht")
.Range(.Cells(5, 1), .Cells(.Rows.Count, 1)).EntireRow.Delete
End With
'Schritt 1: Arbeitsblatt festlegen in welches die gesammelten Daten geschrieben werden  _
sollen
Set oTargetSheet = ActiveWorkbook.Sheets("Übersicht")
lErgebnisZeile = 5 'Ergebnisse eintragen ab Zeile 5
'Schritt 2: Schleife über alle Excel Dateien in einem Verzeichnis
sPfad = "P:AuftragserstellungAuftragsablage"
sDatei = Dir(CStr(sPfad & "*xlsx")) 'nur xlsx Dateien '(sPfad & "*.xl*")) 'Alle Excel  _
Dateien
Do While sDatei  ""
'Schritt 3: öffnen der Datei und Datenübertragung
Set oSourceBook = Workbooks.Open(sPfad & sDatei, False, True) 'nur lesend öffnen
'Datenübertragung alle genutzten Zeilen und Spalten der Quelldateien sPfad
For z = 1 To oSourceBook.Sheets("Tabelle1").UsedRange.Rows.Count
'Keine Leerzeilen verarbeiten
If Trim(CStr(oSourceBook.Sheets("Tabelle1").Cells(z, 1).Value))  "" Then
For s = 1 To oSourceBook.Sheets("Tabelle1").UsedRange.Columns.Count
'Spalte 1 - Dateinamen der Quelldateiein in Spalte A eintragen.
oTargetSheet.Cells(lErgebnisZeile, 1).Value = sDatei
'ab Spalte 2 bis n - Tabelleninhalte des Arbeitsblattes "Übersicht"  _
eintragen
oTargetSheet.Cells(lErgebnisZeile, s + 1).Value = _
oSourceBook.Sheets("Tabelle1").Cells(z, s).Value
Next s
lErgebnisZeile = lErgebnisZeile + 1
End If
Next z
'Schritt 4: Datei wieder zu machen und nächste Schleifenrunde
oSourceBook.Close False 'nicht speichern
'Nächste Datei
sDatei = Dir()
Loop
Application.ScreenUpdating = True 'Das Bildschirm-Aktualisieren wieder einschalten
GetMoreSpeed (False) ' Startet mdl_beschleunigung ***
'Variablen aufräumen
Set oTargetSheet = Nothing
Set oSourceBook = Nothing
End Sub

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellen in einer Tabelle sammeln, inkl. Formatier
18.01.2017 01:32:53
fcs
Hallo Christian,
wenn die Formate mit übertragen werden sollen, dann muss man die Zellen der Quelle kopieren.
LG
Franz
'Variante, wenn Quelltabellen keine Formeln enthalten
          'Datenübertragung alle genutzten Zeilen und Spalten der Quelldateien sPfad
With oSourceBook.Sheets("Tabelle1")
'Zahl benutzter Spalten in Quelle
s = .UsedRange.Columns.Count
For z = 1 To .UsedRange.Rows.Count
'Keine Leerzeilen verarbeiten
If Trim(CStr(.Cells(z, 1).Value))  "" Then
'Spalte 1 - Dateinamen der Quelldateiein in Spalte A eintragen.
oTargetSheet.Cells(lErgebnisZeile, 1).Value = sDatei
'Daten in Zeile der Quelltabelle kopieren
.Range(.Cells(z, 1), .Cells(z, s)).Copy _
Destination:=oTargetSheet.Cells(lErgebnisZeile, 2)
lErgebnisZeile = lErgebnisZeile + 1
End If
Next z
End With

'Variante, wenn Quelltabellen Formeln enthalten
          'Datenübertragung alle genutzten Zeilen und Spalten der Quelldateien sPfad
With oSourceBook.Sheets("Tabelle1")
'Zahl benutzter Spalten in Quelle
s = .UsedRange.Columns.Count
For z = 1 To .UsedRange.Rows.Count
'Keine Leerzeilen verarbeiten
If Trim(CStr(.Cells(z, 1).Value))  "" Then
'Spalte 1 - Dateinamen der Quelldateiein in Spalte A eintragen.
oTargetSheet.Cells(lErgebnisZeile, 1).Value = sDatei
'Daten in Zeile der Quelltabelle kopieren
.Range(.Cells(z, 1), .Cells(z, s)).Copy
oTargetSheet.Cells(lErgebnisZeile, 2).PasteSpecial Paste:=xlPasteFormats
oTargetSheet.Cells(lErgebnisZeile, 2).PasteSpecial Paste:=xlPasteValues
lErgebnisZeile = lErgebnisZeile + 1
End If
Next z
End With

Anzeige
AW: Tabellen in einer Tabelle sammeln, inkl. Formatier
18.01.2017 08:07:01
Christian
Danke für deine Hilfe, Franz.
AW: Tabellen in einer Tabelle sammeln, inkl. Formatier
18.01.2017 01:40:02
littletramp
Hallo Christian
Du fügst nur den Wert ein. Ersetze die Zeile
oTargetSheet.Cells(lErgebnisZeile, s + 1).Value = oSourceBook.Sheets("Tabelle1").Cells(z, s).Value

Durch folgende Zeile
oSourceBook.Sheets("Tabelle1").Cells(z, s).Copy oTargetSheet.Cells(lErgebnisZeile, s + 1)

Gruss Markus
AW: Tabellen in einer Tabelle sammeln, inkl. Formatier
18.01.2017 01:57:52
littletramp
Hallo Christian
Ich würde mich noch für dein GetMoreSpeed (True) ' Startet mdl_beschleunigung *** interessieren.
Gruss Markus
AW: Tabellen in einer Tabelle sammeln, inkl. Formatier
18.01.2017 08:06:17
Christian
Vielen Dank Markus.
Es funktioniert.
Hier der Code für GetMoreSpeed 'Startet mdl_beschleunigung ***
Public Static Sub GetMoreSpeed(Optional ByVal modus As Boolean = True) ' Ein  _
Beschleunigungsmakro ***
Dim intCalculation As Integer
If modus = True Then intCalculation = Application.Calculation
With Application
.ScreenUpdating = Not modus
.EnableEvents = Not modus
.Calculation = IIf(modus = True, xlManual, intCalculation)
.Cursor = IIf(modus = True, 2, -4143)
End With
End Sub
Ich habe nicht viel Ahnung was der Code bewirkt. Wenn du magst, dann kannst du ihn gerne erklären oder verbessern.
Danke
Anzeige
AW: Tabellen in einer Tabelle sammeln, inkl. Formatier
18.01.2017 08:58:52
littletramp
Hallo Christian
Der Code braucht wirklich eine Verbesserung, da er beim Zurückstellen des Berechnungsmodus gar nicht das tut, was er sollte. Er fügt immer 0 (Null) ein.
Mache folgende Korrektur:
Static intCalculation As Integer

Falls du wissen möchten, was Static bewirkt, so konsultiere die Hilfe.
Von einem generellen Einsatz dieses Makros (Prozedur) würde ich abraten, insbesondere für Programmierer, die nicht wissen was der Makro tut, da du damit rechnen musst, dass dein Code nicht mehr das macht was er sollte -> EnableEvents + Calculation.
Gruss Markus
Anzeige
AW: Tabellen in einer Tabelle sammeln, inkl. Formatier
18.01.2017 09:05:50
Christian
Danke Markus.
Den Code habe ich mal von einem Programmierer erhalten, der mir auch etwas anderes gemacht hat.
Ich schätze andere Meinungen sehr.
Gibt es eine andere Möglichkeit um Makros zu beschleunigen?
Solle ich deine Änderunge statt

Dim intCalculation As Integer
eintragen?
Danke
AW: Tabellen in einer Tabelle sammeln, inkl. Formatier
18.01.2017 13:25:38
littletramp
Hallo Christian
Du musst in Sub GetMoreSpeed() auf jeden Fall Dim durch Static ersetzen.
Wichtig: Dies gilt nur für diese Prozedur (das ist ein Spezialfall), du musst sonst wie bisher Dim verwenden!
Zusätzlich empfehle ich dir in Sub GetMoreSpeed() folgende Zeile zu löschen:
        .EnableEvents = Not modus
EnableEvents musst du jeweils nach Bedarf ein-/ausschalten, aber sicher nicht generell.
Wenn du deinen Code schneller machen möchtest, so darfst du im Kopf von For ... Next keine Berechnungen einfügen, da diese sonst bei jedem Durchlauf der Schleife neu Berechnet werde.
Also folgende Zeile:

For z = 1 To oSourceBook.Sheets("Tabelle1").UsedRange.Rows.Count
durch folgende Zeilen ersetzen:

Dim lngLast as Long
lngLast = oSourceBook.Sheets("Tabelle1").UsedRange.Rows.Count
For z = 1 To lngLast
Dies solltest du bei allen Schleifen die sehr oft durchlaufen werden so machen.
Gruss Markus
PS: War der "Programmierer", der für dich gearbeitet hat ein Profi? Wenn ja, warst du da zufrieden ;-) ? Wenn nicht, ich führe seit seit 1996 VBA-Auftragsarbeiten aus. Siehe www.maschmid.ch
Anzeige
Bilder
18.01.2017 14:07:34
KlausF
Hallo Markus,
wirklich sehr schöne und beeindruckende Bilder von
Deiner Weltreise auf littletramp.ch ...
Gruß
Klaus
AW: Bilder
18.01.2017 23:04:54
littletramp
Hallo Klaus
Danke für dein Kompliment.
Gruss Markus

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige