Wert fester Zellen verschiedener Dateien auslesen
Hallo,
ich bin was Excel - und insb. was VBA angeht - ein absoluter Beginner und hoffe, bei Euch etwas Hilfe zu bekommen. Hier ist mein Problem:
Es geht um eine Zusammenfassung von Arbeitszeiterfassung. Für jeden Monat gibt es ein Excel Workbook. Für jeden Mitarbeiter innerhalb des Workbooks ein Sheet, auf welchem die genauen Zeiten als auch die Gesamtsumme erfasst sind. Alle Workbooks befinden sich in einem Ordner.
Ich möchte nun eine Übersichtstabelle erstellen, die sich aus allen Sheets/Workbooks die entsprechenden Daten automatisch zieht:
Abteilung = Zelle A4
Name: Zelle A6
Gesamtstunden: Zelle S41
Ich hoffe, das reicht erstmal an Information. Vielen Dank im Voraus für Eure Hilfe!
ich bin was Excel - und insb. was VBA angeht - ein absoluter Beginner und hoffe, bei Euch etwas Hilfe zu bekommen. Hier ist mein Problem:
Es geht um eine Zusammenfassung von Arbeitszeiterfassung. Für jeden Monat gibt es ein Excel Workbook. Für jeden Mitarbeiter innerhalb des Workbooks ein Sheet, auf welchem die genauen Zeiten als auch die Gesamtsumme erfasst sind. Alle Workbooks befinden sich in einem Ordner.
Ich möchte nun eine Übersichtstabelle erstellen, die sich aus allen Sheets/Workbooks die entsprechenden Daten automatisch zieht:
Abteilung = Zelle A4
Name: Zelle A6
Gesamtstunden: Zelle S41
Ich hoffe, das reicht erstmal an Information. Vielen Dank im Voraus für Eure Hilfe!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 120493
Url: https://administrator.de/contentid/120493
Ausgedruckt am: 23.11.2024 um 02:11 Uhr
23 Kommentare
Neuester Kommentar
Hallo jeanpaul23!
Ein paar Info's fehlen noch.
Befinden sich in dem Ordner außer der Übersicht- und Monatsdateien noch andere Dateien?
Wie heißt die Übersichtsdatei?
Wie heißt das Tabellenblatt?
Und wie soll die Übersicht aussehen? Spalte A = Abteilung, Spalte B = Name, Spalte C = Stunden?
Gruß Dieter
Ein paar Info's fehlen noch.
Befinden sich in dem Ordner außer der Übersicht- und Monatsdateien noch andere Dateien?
Wie heißt die Übersichtsdatei?
Wie heißt das Tabellenblatt?
Und wie soll die Übersicht aussehen? Spalte A = Abteilung, Spalte B = Name, Spalte C = Stunden?
Gruß Dieter
Hallo jeanpaul23!
Target.Spalte B Monat?
Sollen die Summen pro Monat aufgeführt werden oder die Gesamt-Summe aller Monate?
Und was ist mit Target.Spalte A? Bei der Aktualisierung, werden nähmlich alle Zellen erstmal gelöscht.
Gruß Dieter
Target.Spalte B Monat?
Sollen die Summen pro Monat aufgeführt werden oder die Gesamt-Summe aller Monate?
Und was ist mit Target.Spalte A? Bei der Aktualisierung, werden nähmlich alle Zellen erstmal gelöscht.
Gruß Dieter
Hallo Bernd!
Und in Monatsblatt.Spalte I4 steht der Monat?
Gruß Dieter
Und in Monatsblatt.Spalte I4 steht der Monat?
Gruß Dieter
Hallo Bern!
Hatte meine Frage nochmal geändert. Steht in Monatsblatt.Spalte I4 der Monat?
Hmh, Du schreibst pro Abteilung. Also tatsächlich nur eine Abteilung in einem Ordner?
Dann währe da noch die Sortierreihenfolge zu klären. 1. Monat und 2. Name?
Gruß Dieter
Hatte meine Frage nochmal geändert. Steht in Monatsblatt.Spalte I4 der Monat?
Hmh, Du schreibst pro Abteilung. Also tatsächlich nur eine Abteilung in einem Ordner?
Dann währe da noch die Sortierreihenfolge zu klären. 1. Monat und 2. Name?
Gruß Dieter
Hallo Bernd!
Nicht gleich übertreiben, dass in Spalte I4 der Monat steht, war so ganz beiläufig in Deinem Makro zu sehen. In dem Fall brauch ich die Namen der Monatsblätter natürlich nicht
Und das mit pro Abteilung hattest Du vorher auch vergessen zu erwähnen. In Deinem ersten
Beitrag, war das auch anders zu verstehen.
Gruß Dieter
Nicht gleich übertreiben, dass in Spalte I4 der Monat steht, war so ganz beiläufig in Deinem Makro zu sehen. In dem Fall brauch ich die Namen der Monatsblätter natürlich nicht
Und das mit pro Abteilung hattest Du vorher auch vergessen zu erwähnen. In Deinem ersten
Beitrag, war das auch anders zu verstehen.
Gruß Dieter
Nö, danke. Ich bin vorerst reichlich bedient
Gruß Dieter
Gruß Dieter
Hallo nochmal!
Sind die Monatsnamen in Spalte I4 in deutsch oder englisch? Wichtig für die Sortierung
Gruß Dieter
Sind die Monatsnamen in Spalte I4 in deutsch oder englisch? Wichtig für die Sortierung
Gruß Dieter
Hallo Bernd!
Hier hast Du mal was zum testen.
Noch ein paar Hinweise:
Falls das Tabellenblatt "YTD JUNE 09" doch anders heissen soll, dann ändere dies in Zeile 8 entsprechend.
Sortiert wird erst nach Monat und dann nach Name. Dafür wird die Spalte A temporär verwendet.
Die Zell-Formatierungen bleiben erhalten, da bei der Aktualisierung nur die Zellinhalte gelöscht werden.
Kopiere den Quellcode im VB-Editor in ein Modul und erstelle eine Verknüpfung mit einer Tastenkombination.
Gruß Dieter
Hier hast Du mal was zum testen.
Noch ein paar Hinweise:
Falls das Tabellenblatt "YTD JUNE 09" doch anders heissen soll, dann ändere dies in Zeile 8 entsprechend.
Sortiert wird erst nach Monat und dann nach Name. Dafür wird die Spalte A temporär verwendet.
Die Zell-Formatierungen bleiben erhalten, da bei der Aktualisierung nur die Zellinhalte gelöscht werden.
Kopiere den Quellcode im VB-Editor in ein Modul und erstelle eine Verknüpfung mit einer Tastenkombination.
Option Explicit
Option Compare Text
Sub InitSheet()
Dim Fso As Object, Folder As Object, File As Object, i As Integer
Dim Wks As Worksheet, mWkb As Workbook, mWks As Worksheet
Set Wks = ThisWorkbook.Sheets("YTD JUNE 09"): Wks.Range("A:E").ClearContents
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Folder = Fso.GetFolder(Fso.GetAbsolutePathName(ThisWorkbook.Path))
Application.ScreenUpdating = False
Wks.Range("B1:E1") = Array("Monat", "Abteilung", "Name", "Stunden"): i = 2
For Each File In Folder.Files
If LCase(Right(File.Name, 4)) = ".xls" And File.Name <> ThisWorkbook.Name Then
Set mWkb = Workbooks.Open(File.Path)
For Each mWks In mWkb.Worksheets
If Not mWks.Name Like "Summary" Then
With mWks
Wks.Cells(i, 1) = GetMonth(Left(Trim(.Range("I4")), 3))
Wks.Cells(i, 2) = Trim(.Range("I4"))
Wks.Cells(i, 3) = Trim(.Range("A4"))
Wks.Cells(i, 4) = Trim(.Range("A6"))
Wks.Cells(i, 5) = .Range("S41")
End With
i = i + 1
End If
Next
mWkb.Close
End If
Next
With Wks
.Columns("A:E").Sort Key1:=.Range("A2"), Key2:=.Range("D2"), Header:=xlYes
.Columns(1).Clear
End With
Application.ScreenUpdating = True
End Sub
Private Function GetMonth(ByRef M) As Integer
GetMonth = Switch(M = "Jan", 1, M = "Feb", 2, M = "Mar", 3, M = "Apr", 4, _
M = "May", 5, M = "Jun", 6, M = "Jul", 7, M = "Aug", 8, _
M = "Sep", 9, M = "Oct", 10, M = "Nov", 11, M = "Dec", 12)
End Function
Gruß Dieter
Hallo Bernd!
Das sieht nur kompliziert aus
Hhm, kann sein, dass ich einen Verweis drinnen habe, den Du nicht drinnen hast. Daher ist es am einfachsten, As Folder und As File in As Object umzuwandeln. Habe dies und noch andere Kleinigkeiten geändert. Also komplett neu kopieren.
Gruß Dieter
Das sieht nur kompliziert aus
Hhm, kann sein, dass ich einen Verweis drinnen habe, den Du nicht drinnen hast. Daher ist es am einfachsten, As Folder und As File in As Object umzuwandeln. Habe dies und noch andere Kleinigkeiten geändert. Also komplett neu kopieren.
Gruß Dieter
Hallo Bernd!
Yep, gern geschehen. Code-Zeile 8 geändert
Gruß Dieter
Yep, gern geschehen. Code-Zeile 8 geändert
Gruß Dieter
Hallo Bernd!
Bei diesem Code, hast Du die Arbeitstage noch mit drinnen:
Ups, habe noch die Clear-Anweisung in Zeile 8 geändert, um die Formatierung beizubehalten.
Die Formeln in Spalte F, werden bei der nächsten Aktualisierung überschrieben.
Auch Dir ein schönes WE.
Gruß Dieter
Bei diesem Code, hast Du die Arbeitstage noch mit drinnen:
Option Explicit
Option Compare Text
Sub InitSheet()
Dim Fso As Object, Folder As Folder, File As File, i As Integer
Dim Wks As Worksheet, mWkb As Workbook, mWks As Worksheet
Set Wks = ThisWorkbook.Sheets("YTD JUNE 09"): Wks.Range("A:F").ClearContents
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Folder = Fso.GetFolder(Fso.GetAbsolutePathName(ThisWorkbook.Path))
Application.ScreenUpdating = False
Wks.Range("B1:F1") = Array("Monat", "Abteilung", "Name", "Stunden", "Arbeitstage")
i = 2
For Each File In Folder.Files
If LCase(Right(File.Name, 4)) = ".xls" And File.Name <> ThisWorkbook.Name Then
Set mWkb = Workbooks.Open(File.Path)
For Each mWks In mWkb.Worksheets
If Not mWks.Name Like "Summary" Then
With mWks
Wks.Cells(i, 1) = GetMonth(Left(Trim(.Range("I4")), 3))
Wks.Cells(i, 2) = Trim(.Range("I4"))
Wks.Cells(i, 3) = Trim(.Range("A4"))
Wks.Cells(i, 4) = Trim(.Range("A6"))
Wks.Cells(i, 5) = .Range("S41")
End With
With Wks
If Not IsEmpty(.Cells(i, 5)) Then .Cells(i, 6) = .Cells(i, 5) / 8
End With
i = i + 1
End If
Next
mWkb.Close
End If
Next
With Wks
.Columns("A:F").Sort Key1:=.Range("A2"), Key2:=.Range("D2"), Header:=xlYes
.Columns(1).Clear
End With
Application.ScreenUpdating = True
End Sub
Private Function GetMonth(ByRef M) As Integer
GetMonth = Switch(M = "Jan", 1, M = "Feb", 2, M = "Mar", 3, M = "Apr", 4, _
M = "May", 5, M = "Jun", 6, M = "Jul", 7, M = "Aug", 8, _
M = "Sep", 9, M = "Oct", 10, M = "Nov", 11, M = "Dec", 12)
End Function
Ups, habe noch die Clear-Anweisung in Zeile 8 geändert, um die Formatierung beizubehalten.
Die Formeln in Spalte F, werden bei der nächsten Aktualisierung überschrieben.
Auch Dir ein schönes WE.
Gruß Dieter