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

Automatisches einlesen/zuordnen von Files

Automatisches einlesen/zuordnen von Files
Files
Hallo,
gibt es eine einfache Möglichkeit (irgendwie komme ich mit der File-Dateisystembezogenen Syntax noch nicht so gut klar) in VBA folgendes Problem zu lösen.
Ich habe 10-30 Excel-Dateien (jeweil ein Tabellenblatt) in einem Verzeichnis c:\import liegen. Nun möchte ich ein einzelnes Excel-File anlegen (natürlich nicht in dem Verzeichnis) und dann ein Script starten, was die Files alle einliest und zwar jeweils genau in ein Tabellenblatt das dann jeweils mit dem Namen (ohne .xls) des Files versehen wird. Und nach dem Einlesen soll direkt noch ein Script ausgeführt werden.
Also Einlesen erste Datei direkt in den TAB 1 - Script ausführen - Einlesen zweite Datei in TAB 2 - Script ausführen - ...
Geht das ohne vorheriger Kenntnis der Datei-Namen?
Tommi
Ja, wn alle Dateien d.Ordners 1gelesen wdn sollen!
17.02.2011 11:00:45
Luc:-?
Ansonsten ggf m.Platzhaltern, Tommi.
Morn & Gruß, Luc :-?
AW: Ja, wn alle Dateien d.Ordners 1gelesen wdn sollen!
17.02.2011 11:41:59
Tommi
Hm,
die Antwort verstehe ich nun nicht ganz ;)
War das nur ein _ja_ aber kein wie es geht?
Also es soll jede Datei in ein einzelnes TAB eingelesen werden (1x), das heisst wie der Dateiname und dann direkt nach dem Einlesen jeweils ein Script gestartet werden, was das TAB formatiert.
Tommi
AW: Ja, wn alle Dateien d.Ordners 1gelesen wdn sollen!
17.02.2011 13:11:54
Tommi
Hallo Franz,
hm, ja, damit kann ich wohl anfangen mir das Thema näher zu bringen, mal schauen ob ich aus den 122 Zeilen Code das für mich relevante rauskriege ;)
Wie geschrieben, eigentlich ging es nur um den Code alle Dateien (mit Zahlen/Werten - keine Tabellen/Formate/Formeln...) eines Verzeichnisses direkt in Tabellenblätter einer ExcelDatei zu verwandeln, ohne Abfragen/Einschränkungen/Auswahlmöglichkeiten usw.)
Ich hatte einfach gedacht ich lege eine Datei an und dann starte ich ein VBA-Script mit einer Schleife in der Form:
FOR nr=1 TO AnzahlDateienInVerzeichnisInput
var1=name(nr)
ERSTELLE TabBlatt mit Namen left(var1,len(var1)-4)
KOPIERE alle Daten von Datei(name(nr)) in TabBlatt
AKTIVIERE TabBlatt
FORMATSCRIPT ausführen
NEXT
So in der Art ;) - aber das war wohl zu einfach gedacht ;) Ich schaue mal ob ich aus dem Code schlau werde, die ganzen Abfragen (Namen/Länge...) und Eingabemasken brauche ich ja nicht, da das alles fest steht.
Danke aber erstmal für den Tip.
Tommi
Anzeige
Daten aus Dateien in Verzeichnis zusammenfasse
18.02.2011 09:22:52
fcs
Hallo Tommi,
mit Level VBA-bescheiden wird es möglicherweise etwas schwierig, da einiges prinzipiell umgestellt werden muss, wenn zunächst "nur" die Werte aus der Quelltabelle in ein leeres Blatt in der Zieltabelle kopiert und anschliessend formatiert werden sollen.
Gruß
Franz
Hier eine vereinfachte Fassung, die die Werte aus allen Dateien im Verzeichnis in eine neue Arbeitsmappe überträgt. Im Code muss du das Verzeichnis mit den Quelldateien anpassen.
Sub Zusammenführen_Tabellen()
' Führt die 1. Tabelle aus den Dateien in Verzeichnis in einer Datei zusammen
' Dabei werden die Werte aus den Quell-Tabellen in leere Tabellen _
in der Ziel-Datei kopiert
Dim Verzeichnis As String
Dim wbQuelle As Workbook, wksQuelle As Worksheet
Dim wbZiel As Workbook, wksZiel As Worksheet
Dim Datei As String
Dim varAuswahl, sBlattName As String
'Verzeichnis mit den Dateien - anpassen !!!!
Verzeichnis = "C:\Users\Public\Test\Daten\"
Application.EnableEvents = False
Application.ScreenUpdating = False
'Exceldateien im Verzeichnis abarbeiten
Datei = Dir(Verzeichnis & "*.xls*")
Do Until Datei = ""
Application.StatusBar = "Datei " & Datei & " wird bearbeitet"
If LCase(Datei)  LCase(ThisWorkbook.Name) Then
'Quelldatei schreibgeschützt öffnen
Set wbQuelle = Workbooks.Open(Filename:=Verzeichnis & Datei, ReadOnly:=True)
Set wksQuelle = wbQuelle.Worksheets(1)
'Zieltabellenblatt anlegen
If wbZiel Is Nothing Then
'Neue Datei zum Zusammenführen der Tabellen Dateien anlegen
Set wbZiel = Workbooks.Add(Template:=xlWBATWorksheet)
Else
'Neues Blatt anfügen
wbZiel.Worksheets.Add After:=wbZiel.Sheets(wbZiel.Sheets.Count)
End If
With wbZiel
Set wksZiel = .Sheets(.Sheets.Count)
End With
'Zielblatt umbenennen
sBlattName = Left(Left(wbQuelle.Name, InStrRev(wbQuelle.Name, ".") - 1), 31)
wksZiel.Name = sBlattName
With wksQuelle
'Tabellendaten nach Ziel-Datei kopieren
.Range(.Cells(1, 1), .Cells.SpecialCells(xlCellTypeLastCell)).Copy
wksZiel.Cells(1, 1).PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
Range("a1").Select
End With
'Quelldatei ohne Speichern wieder schliessen
wbQuelle.Close Savechanges:=False
End If
'Kopierte Daten formatieren
Call Formatieren(wks:=wksZiel)
Datei = Dir
Loop
Application.StatusBar = False
Application.ScreenUpdating = True
' Datei-Speichern Dialog anzeigen
If Not wbZiel Is Nothing Then
varAuswahl = Application.Dialogs(xlDialogSaveWorkbook).Show
End If
Application.EnableEvents = True
End Sub
Sub Formatieren(wks As Worksheet)
'Beispielhaft
With wks
.Columns(1).NumberFormat = "000"        '001
.Columns(2).NumberFormat = "#,###.##"   '22.111,01
.Columns(3).NumberFormat = "DD.MM.YYYY" '01.02.2011
.Columns.AutoFit 'Spaltenbreiten optimieren
End With
End Sub

Anzeige
AW: Automatisches einlesen/zuordnen von Files
17.02.2011 15:55:56
Files
Hallo,
so in der Art:
Sub ttt()
Dim sFile As String, wkb As Workbook, wks As Worksheet
Const sPfad As String = "c:\Import\"
sFile = Dir(sPfad & ".xls", vbNormal)
If sFile  "" Then Set wkb = Workbooks.Add(1)
Do While sFile  ""
Set wks = Workbooks.Open(sPfad & sFile).Sheets(1)
wks.Copy after:=wkb.Sheets(wkb.Sheets.Count)
wks.Parent.Close False
'DeinCode
sFile = Dir
Loop
End Sub

Gruß
Rudi
AW: Automatisches einlesen/zuordnen von Files
17.02.2011 16:54:40
Files
Hallo Rudi,
hm, ja, so habe ich es mir vorgestellt - ich habe das xls durch xlsx getauscht und vor dem .xlsx noch ein * gesetzt (irgendwie wollte es ohne nicht klappen), nun noch
ActiveSheet.Name = Left(sFile, Len(sFile) - 5)
vor dem sFile = Dir eingefügt, mein Script eingebaut und schwupps - genau das habe ich gesucht!
Super, das erspart mir echt viel Arbeit! - Danke
Tommi
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige