5.9k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo,

war eigentlich ein schönes Wochenende, aber diese
Sache hat es mir vermiest.

Ich habe mit dem Makrorecorder einen Daten Import/Export aufgezeichnet. Es geht um 2 Exceldateien.

Das funktioniert auch sehr gut, wenn man den vollständigen Pfad angibt.

Habe gegoogelt und das hier noch gefunden:
************************************************************************
Datei = "März"
Path = "C:\Users\micha\Desktop\Aufträge\"
FilesInPath = Path & Dir$(Path & Datei & "*.xls*")

Workbooks.Open Filename:=FilesInPath

Sheets("Bestände").Select
*************************************************************************
Öffnen ist dann kein Problem, nur mit einem Platzhalter kann ich dieses Workbook nicht aktivieren, wenn vorher wieder zur Quelldatei gewechselt wurde.


Beispiel:
********************************************************************
So ist alles gut:

Windows("Aufträge März..xlsx").Activate

Sheets("Bestände").Select

*********************************************************************

*********************************************************************
So z.B.geht es nicht:

Windows(Files in Path) . Activate

Sheets("Bestände").Select

*********************************************************************

Weiß dafür jemand eine Lösung ?
Danke im Voraus.

Michael

Version Excel 2007 , OS = Windows 2007

11 Antworten

0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo Michael,

so funktioniert es:

Sub test()

Dim datei As String

datei = "März"
Workbooks(datei).Activate
Worksheets("Bestände").Select

End Sub


Auf Activate und Select kannst du aber meistens verzichten, wenn du Zellen etc. richtig ansprichst:

ThisWorkbook.Worksheets("Tabelle1").Range("A1") = Workbooks(datei).Worksheets("Bestände").Range("A1")


Gruß
M.O.
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

es wird nur eine Datei gelesen !
dann reicht es auch so aehnlich

gruss nighty

Workbooks.Open Filename:="C:\Users\micha\Desktop\Aufträge\März.xls"
ActiveWorkbook.Worksheets("Bestände").Range("A1:A2").Copy
0 Punkte
Beantwortet von
Hallo,

vielen Dank euch beiden, das klappt schon mal einwandfrei !

Zusatzfrage: Wenn ich jedesmal eine Datei habe, deren Anfang gleich bleibt, wie z.B. "März" und
danach verschiedene Einträge kommen 1. oder 2. oder 3. etc. kommen, wie kann
ich dann einen Platzhalter für die restlichen Einträge nutzen ?

Dachte, mit "*", passend zum Beispiel: datei = "März"

#########################################################
So habe ich es versucht, aber es kommt dann die Fehlermeldung
9 "Index außerhalb des gültigen Bereichs" :

Sub test()

Dim datei As String

datei = "März*"

Workbooks(datei).Activate
Worksheets("Bestände").Select

End Sub
##########################################################

Das wäre toll, wenn ihr mir da helfen könntet.

Grüße
Michael
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo Michael,

der Fehler kommt, da es die Datei "März*" nicht gibt. Du musst den genauen Dateinamen benutzen. Dies machst du z.B. über eine Schleife. Wenn du genau weißt, wie die Dateien heißen, kannst du das z.B. so machen:

Beispiel:
Sub test()
Dim datei As String
Dim z As Long

For z = 1 To 3
datei = "März" & z & ".xlsx"
Workbooks(datei).Activate
Worksheets("Bestände").Select
Next z

End Sub


Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.,

das ist eine gute Möglichkeit, leider ist nur der "März" konstant. Das Beispiel deutet natürlich auch auf
Zahlen zwischen 1 und 31 hin, aber es können auch andere Zahlen, bzw. Texte dahinterstehen, die vorher nicht bekannt sind.

Scheint eine schwierige Sache zu sein, ich weiß mir da keinen Rat mehr.

Vielen Dank für die Info, mein Beispiel war irreführend.

Gruß
Michael
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo Michael,

dann erkläre mal dein Problem genauer. Falls z.B. alle Excel-Dateien aus einem Verzeichnis geöffnet werden sollen, die mit "März" beginnen, dann ist das auch möglich. Aber ohne ein genaue Problembeschreibung kann man dir nicht helfen.

Gruß

M.O.
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi al ^^

ein Platzhalter beispiel

"März*.xls"

gruss nighty
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

ein einfaches Beispiel

gruss nighty

Sub DateienLesen()
Call EventsOff
Dim Dname As String, Dpfad As String, DateiName As String
Dname = "März*.xls"
Dpfad = "D:\Temp\"
DateiName = Dir(Dpfad & Dname)
Do While DateiName <> ""
Workbooks.Open Filename:=Dpfad & DateiName
Workbooks(DateiName).Worksheets(1).Range("A1:A" & Workbooks(DateiName).Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row).Copy _
ThisWorkbook.Worksheets(1).Range("A" & ThisWorkbook.Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row + 1)
Workbooks(DateiName).Close SaveChanges:=False
DateiName = Dir
Loop
Call EventsOn
End Sub

Public Sub EventsOff()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
End Sub
Public Sub EventsOn()
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

hier eine variante auf worksheets bezogen

worksheet("Märzxxxxxxxx") wird ausgelesen aus allen gefundenen Dateien

gruss nighty

Sub DateienLesen()
Call EventsOff
Dim Dname As String, Dpfad As String, DateiName As String, Dmonat As String
Dname = "*.xls"
Dpfad = "D:\Temp\"
Dmonat = "MÄRZ"
DateiName = Dir(Dpfad & Dname)
Do While DateiName <> ""
Workbooks.Open Filename:=Dpfad & DateiName
For Each sh In Worksheets
If UCase(Mid(sh.Name, 1, Len(Dmonat))) = Dmonat Then
Workbooks(DateiName).Worksheets(sh.Name).Range("A1:A" & Workbooks(DateiName).Worksheets(sh.Name).Range("A" & Rows.Count).End(xlUp).Row).Copy _
ThisWorkbook.Worksheets(1).Range("A" & ThisWorkbook.Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row + 1)
End If
Next
Workbooks(DateiName).Close SaveChanges:=False
DateiName = Dir
Loop
Call EventsOn
End Sub

Public Sub EventsOff()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
End Sub

Public Sub EventsOn()
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub
0 Punkte
Beantwortet von
Hallo nighty,

ja, so funktioniert es ! Danke an dich und alle, die mir Support gegeben haben.
...