Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
632to636
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
632to636
632to636
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Aus 400 Arbeitsmappen zellen auslesen

Aus 400 Arbeitsmappen zellen auslesen
08.07.2005 02:06:22
Dieter
Hallo,
ich habe einen Ordner mir ca. 400 und mehr Excel Arbeitsmappen uns würde gerne bestimme Zellen jeder Arbeitsmappe vier verschiedenen Arbeitsblättern in eine Tabelle auslesen. Diese sind immer gleich formatiert und ich brauche immer die gleichen Zellen
Als erstes möchte ich von jeder Arbeitsmappe den Dateinamen auslesen und in Spalte A untereinander schreiben. Danach will ich aus Arbeitsblatt "1" ein paar Zellen auslesen und dann aus Tabellenblatt "2" usw. Alles in die gleich Zeile wie der Dateiname.
Und dann am besten die Arbeitsmappe schließen ohne zu speichern!
Hat da jemand eine Idee? Vorallem wie ich die Dateiname auslese und dann öffne.
Vielen Dank
Dieter

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

Betreff
Datum
Anwender
Anzeige
AW: Aus 400 Arbeitsmappen zellen auslesen
08.07.2005 02:52:22
Reinhard
Hi Dieter,
in der vba Hilfe findest du sowas:
Set fs = Application.FileSearch
With fs
.LookIn = "C:\My Documents"
.FileName = "*.doc"
If .Execute(SortBy:=msoSortbyFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
MsgBox "There were " & .FoundFiles.Count & _
" file(s) found."
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Next i
Else
MsgBox "There were no files found."
End If
End With
Anstatt MsgBox .FoundFiles(i) schreibst du activesheet.Cells(i,1)= .FoundFiles(i)
Dann haste schon mal die Liste.
Dann mit
for n= 1 to zei
workbook(cells(n,1)).open
zei=range("A65536").end(xlup).row die Anzahl der Einträge ermitteln.
thisworkbook.activesheet.cells(n,2) = worksheets("k.A.").range("A1")
thisworkbook.activesheet.cells(n,3) = worksheets("k.A.").range("B1")
usw
activeworkbook.close savechances=false
next n
Sicher nicht die Lösung die funktioniert, aber schon mal ein richtiger Ansatz. Bin müde.
Gruß
Reinhard

Anzeige
AW: Aus 400 Arbeitsmappen zellen auslesen
08.07.2005 07:02:34
Heinz
Hallo Dieter,
hier eine Möglichkeit:

Sub Auslesen()
Dim fs As FileSearch, wb As Workbook, ws As Worksheet, efz%
Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet, ws4 As Worksheet
Application.scrennupdating = False
Set ws = ActiveSheet
Set fs = Application.FileSearch
With fs
.LookIn = "C:\My Documents"
.Filename = "*.doc"
If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then
For i = 1 To .FoundFiles.Count
efz = ws.Cells(Rows.Count, 1).End(xlUp).Row
'*** Der Dateiname samt Pfad wird in die aktive Tabelle geschrieben
ws.Cells(efz, 1).Value = .FoundFiles(i)
Application.StatusBar = "Die Datei " & .FoundFiles(i) & " wird geöffnet"
Set wb = Workbooks.Open(Filename:=.FoundFiles(i))
'*** Zellen werden ausgelesen und in die aktive Tabelle geschrieben
Set ws1 = wb.Worksheets("Tabelle1")
Set ws2 = wb.Worksheets("Tabelle2")
Set ws3 = wb.Worksheets("Tabelle3")
Set ws4 = wb.Worksheets("Tabelle4")
ws.Cells(efz, 2).Value = ws1.Range("A15").Value
ws.Cells(efz, 3).Value = ws2.Range("A15").Value
ws.Cells(efz, 4).Value = ws3.Range("A15").Value
ws.Cells(efz, 5).Value = ws4.Range("A15").Value
wb.Close False
Next i
End If
End With
Application.StatusBar = False
Application.scrennupdating = True
End Sub

Gruß
Heinz
Anzeige
AW: Aus 400 Arbeitsmappen zellen auslesen
08.07.2005 07:59:20
Matthias
Hallo Dieter,
der Folgende Code verlangt in A1 den Pfadnamen, sowie ab Spalte B in Zeile 1 den Blattnamen (z.B. Tabelle1) und in Zeile 2 den Zellnamen (z.B. A1):

|   A    |    B    |    C    |
1  |C:\test |Tabelle1 |Tabelle2 |
2  |        |A1       |A1       | ..usw.
Die Dateien werden mit GetValue (eine Funktion, die Werte aus geschlossenen Mappen liest, ich habe diese hier aus dem Forum) ausgelesen.
Der Code:
Option Explicit
'VBA Function to Get a Value From a Closed File
'VBA does not include a method to retrieve a value from a closed file.
'You can, however, take advantage of Excel's ability to work with linked files.
'This tip contains a VBA function that retrieves a value from a closed workbook.
'It does by calling an XLM macro.
'The GetValue Function
'The GetValue function, listed below takes four arguments:
'path: The drive and path to the closed file (e.g., "d:\files")
'file: The workbook name (e.g., "99budget.xls")
'sheet: The worksheet name (e.g., "Sheet1")
'ref: The cell reference (e.g., "C4")
Function GetValue(path, file, sheet, ref)
' Retrieves a value from a closed workbook
Dim arg As String
' Make sure the file exists
If Right(path, 1) <> "\" Then path = path & "\"
'If Dir(path & file) = "" Then
'    GetValue = "File Not Found"
'    Exit Function
'End If
' Create the argument
arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
Range(ref).Range("A1").Address(, , xlR1C1)
' Execute an XLM macro
GetValue = ExecuteExcel4Macro(arg)
End Function
Sub Auslesen()
Const ErsteZeile = 3
Dim Pfad As String, AnzSpalten As Integer
Dim fn As String, Zeile As Long, Spalte As Integer
Dim i As Integer
Rows(ErsteZeile & ":" & Rows.Count).ClearContents
AnzSpalten = Cells(1, 256).End(xlToLeft).Column
'Debug.Print AnzSpalten
Pfad = Range("A1")
Zeile = ErsteZeile + 1
If Right(Pfad, 1) <> "\" Then Pfad = Pfad & "\"
fn = Dir(Pfad & "*.xls")
Application.StatusBar = "Bitte warten..."
Do
For i = 2 To AnzSpalten
Cells(Zeile, 1) = fn
Cells(Zeile, i) = GetValue(Pfad, fn, Cells(1, i), Cells(2, i))
Next i
Zeile = Zeile + 1
fn = Dir()
Loop Until fn = ""
Application.StatusBar = False
End Sub

Grüße,
Matthias
Anzeige
AW: Aus 400 Arbeitsmappen zellen auslesen
Dieter
Hallo,
also das mit dem getvalue hört sich interessant an. Nur was bedeutet das Option Explicit
und wo muss ich die function eintragen? Habe leider nur ein paar Erfahrungen mit Excel vba. Sonst nur mit dem Macrorecorder usw. gearbeitet.
Vielen Dank
Dieter
AW: Aus 400 Arbeitsmappen zellen auslesen
08.07.2005 22:58:39
Matthias
Hallo Dieter,
in Excel Alt-F11, damit öffnest du den VB-Editor.
Dann Menü Einfügen - Modul, schon öffnet sich ein Fenster und links in der Liste ist "Modul1" markiert. Ins Codefenster rechts den Code von "Option Explicit" bis "End Sub" alles hier reinkopieren (Strg-C, Strg-V).
Wenn du mit Rekorder gearbeitet hast, weißt du ja dann, wie man das Makro "Auslesen" startet.
Option Explict heißt, dass in diesem Modul alle verwendeten Variablen deklariert werden müssen. Das zwingt zu einer saubereren Programmierung:
For i=1 To 100
Next i

geht dann nicht hier muss vorher ein
Dim i As Integer 'oder auch nur Dim i

hin.
Gruß Matthias
Anzeige

335 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige