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

Neuste Dateiversion öffnen bei vers. Dateinamen

Neuste Dateiversion öffnen bei vers. Dateinamen
29.10.2015 09:51:54
JB
Hallo zusammen,
ich habe ein Verzeichnis, das ca. 500 Ordner enthält und habe ein Programm geschrieben, das jeden dieser 500 Unterordner öffnet. Als nächstes möchte ich in jedem dieser Ordner eine ganz bestimmte Datei öffnen, um Informationen einzulesen. Es handelt sich jeweils um die neueste Version einer Excel-Datei. Die Dateinamen weichen voneinander ab und ich frage mich, wie man das im Code umsetzten könnte, damit immer nur die neuste Version geöffnet wird.
Die Dateien heißen folgendermaßen:
Worksheet796258.xls oder
2ndWorksheet796258.xls oder
3rdWorksheet796258.xls
....
oder auch
Worksheet 778412 issue 1.xls
Workssheet 778412 issue 2.xls
...
oder dasselbe als *.xlsm
Fett markiert habe ich jeweils die Datei, die in dem Fall geöffnet warden soll. Je höher die Versionsnummer (issue bzw. 2nd/3rd/...), desto aktueller die Datei. Wird keine Excel-Datei im Ordner gefunden, soll im nächsten Ordner weitergesucht werden.
Das habe ich bisher:
Sub Open_workscope_files()
Dim FileSystem As Object
Dim HostFolder As String
'rootpath containing all DLH folders
HostFolder = "\...\Desktop\Worksheets"
Set FileSystem = CreateObject("Scripting.FileSystemObject")
DoFolder FileSystem.GetFolder(HostFolder)
End Sub
Sub DoFolder(Folder)
Dim SubFolder
For Each SubFolder In Folder.SubFolders
DoFolder SubFolder
MsgBox SubFolder
Next
Dim File
'For Each File In Folder.Files
' Operate on each file
'Next
End Sub
Ich hoffe, ihr könnt mir weiterhelfen!

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Crossposting!!! !!!!!!!
29.10.2015 11:00:35
Armin
Hallo Crossposting ist nicht erwünscht!

AW: Crossposting!!! !!!!!!!
29.10.2015 11:11:18
JB
Was? Ich verstehe nicht, was du meinst.

armin wollte...
29.10.2015 11:23:09
selli
hallo jb,
...allen anderen im forum nur mitteilen, dass du ein ganz, ganz böser (böse?) bist und in mehreren foren gleichzeitig die gleiche frage stellst.
er hat es als erster gemerkt und ist mit der information auch gleich zum lehrer gegangen.
der wird wohl dann auch deine eltern informieren.
gruß
selli

AW: armin wollte...
29.10.2015 11:31:30
JB
Achso tut mir leid, ich wusste nicht, dass das ein No-Go ist ;-)
Kommt nie wieder vor!

AW: Neuste Dateiversion öffnen bei vers. Dateinamen
29.10.2015 13:18:38
fcs
Hallo JB,
du hast Glück, dass ich das Cross-Posting nicht bemerkt habe und auch nicht weiss wo, und eine Lösung schon fertig hatte bevor ich hier die Hinweise gelesen hab.
Das Makro sammelt die Dateinamen in einem Datenarray das dann nach dem Durchsuchen aller Ordner abgearbeitet wird.
Wenn das Speicherdatum der Datei ein zuverlässiges Kriterium ist, dann könnte man auch damit arbeiten.
Gruß
Franz
'Code in einem allgemeinen Modul
Option Explicit
Private Zeile As Long, arrFiles() As String, intFile As Integer
Sub Open_workscope_files()
Dim FileSystem As Object
Dim HostFolder As String
Zeile = 1
intFile = 0
Erase arrFiles
'rootpath containing all DLH folders
HostFolder = "\...\Desktop\Worksheets"
HostFolder = "Y:\Test"
Set FileSystem = CreateObject("Scripting.FileSystemObject")
DoFolder FileSystem.GetFolder(HostFolder)
If intFile > 0 Then
For Zeile = 1 To intFile
MsgBox arrFiles(2, Zeile)
Cells(Zeile + 1, 1) = arrFiles(2, Zeile)
Next
End If
End Sub
Sub DoFolder(Folder)
Dim SubFolder, strXlFile As String
For Each SubFolder In Folder.SubFolders
strXlFile = fncGetFileName(objFolder:=SubFolder)
'        Zeile = Zeile + 1                            'Testzeile
'        ActiveSheet.Cells(Zeile, 1) = SubFolder.Path 'Testzeile
'        ActiveSheet.Cells(Zeile, 2) = strXlFile      'Testzeile
DoFolder SubFolder
Next
Dim file
End Sub
Function fncGetFileName(ByVal objFolder As Object) As String
Dim bolFound As Boolean, file As Variant
Dim iCount As Integer, iNumber As Integer
Dim strExcelFile As String, strLatest As String
iCount = -1
For Each file In objFolder.Files
If Right(LCase(file.Name), 5) Like "*.xls*" Then
strExcelFile = file.Name
If IsNumeric(Left(strExcelFile, 1)) Then ' 1st, 2nd, 3rd, 5th, ...
strExcelFile = Left(strExcelFile, 2)
If IsNumeric(Right(strExcelFile, 1)) Then
iNumber = Val(strExcelFile)
Else
iNumber = Val(Left(strExcelFile, 1))
End If
iNumber = Val(strExcelFile)
ElseIf InStr(1, strExcelFile, "issue") > 0 Then
strExcelFile = Mid(strExcelFile, InStr(1, strExcelFile, "issue") + 5)
strExcelFile = Trim(Left(strExcelFile, InStrRev(strExcelFile, ".") - 1))
iNumber = Val(strExcelFile)
Else
iNumber = 0
End If
If iNumber > iCount Then
If iCount = -1 Then
intFile = intFile + 1
ReDim Preserve arrFiles(1 To 2, 1 To intFile)
End If
iCount = iNumber
arrFiles(1, intFile) = file.Name
arrFiles(2, intFile) = file.Path
strLatest = file.Name
End If
End If
Next
fncGetFileName = strLatest
End Function

Anzeige
Neuste Dateiversion öffnen bei vers. Dateinamen
29.10.2015 15:48:26
JB
Hallo Franz,
vielen Dank für deine Hilfe! Das funktioniert wunderbar!

AW: Frage beantwortet
01.11.2015 11:38:02
fcs
.

AW: Neuste Dateiversion öffnen bei vers. Dateina
29.10.2015 14:51:20
matthias
Hallo JB,
schau dir bitte mal an ob das deinen Vorstellungen entspricht:
Sub Aktualisierung()
Dim sHostfolder As String   'Hauptordner
Dim fFolders() As String    'alle Unterordner
Dim fFiles()                'alle *xls-Files im aktiven Unterordner
Dim i As Long, j As Long    'Zähler
ReDim fFolders(0)
sHostfolder = "R:\Arbeitsordner\Tutorial_Excel\Tests\fFolders"
fFolders(0) = sHostfolder 'Falls im Hostfolder selber auch Dateien liegen können diesen  _
ebenfalls merken
GetFolders sHostfolder, fFolders 'hole alle Unterordner
For i = 0 To UBound(fFolders) 'für jeden Unterordner
ReDim fFiles(0)
fFiles(0) = Dir(fFolders(i) & "\*.txt")
Do Until fFiles(0) = ""     'bestimme "*.xls*"-Files im Ordner
ReDim Preserve fFiles(UBound(fFiles) + 1)
fFiles(UBound(fFiles)) = fFiles(0)
fFiles(0) = Dir
Loop
fFiles(0) = 0
For j = 1 To UBound(fFiles) 'aus allen "*.xls*"-Files die neueste bestimmen
If ExtractNumbers(CStr(fFiles(j))) > fFiles(0) Then _
fFiles(0) = ExtractNumbers(CStr(fFiles(j)))
Next j
RefreshFile (fFolders(i) & "\" & fFiles(0) & "*.txt") 'Aufruf des Files und  _
Kopiervorgang
Next i
End Sub

'Abwandlung aus diesem Post:  _
http://www.office-loesung.de/ftopic138569_0_0_asc.php
Private Sub GetFolders(ByVal sHostfolder As String, fFolders() As String)
Dim objFS As Object, objFolder As Object
Set objFS = CreateObject("Scripting.FilesystemObject")
Set objFolder = objFS.GetFolder(sHostfolder)
Tree objFolder, fFolders
Set objFolder = Nothing
Set objFS = Nothing
End Sub
Private Sub Tree(ByVal objFolder As Object, fFolders() As String)
Dim objSubFolder As Object
For Each objSubFolder In objFolder.subfolders
ReDim Preserve fFolders(UBound(fFolders) + 1)
fFolders(UBound(fFolders)) = objSubFolder.Path 'Subfolder merken
Tree objSubFolder, fFolders
Next
End Sub

Private Sub RefreshFile(ByVal wkbName As String)
Dim wkbFile As Workbook
Set wkbFile = Workbooks.Open(wkbName, ReadOnly:=True)
'...deine Kopierroutine ("Informationen einlesen")
With wkbFile
'wkbFile.Sheets("Tabelle1").Range("A1:A10").Copy _
Destination:=ThisWorkbook.Sheets("Tabelle1").Range("A1:A10") 'Beispielhaft
End With
wkbFile.Close
End Sub

Private Function ExtractNumbers(sFileName As String) As Long
Dim x As Long
If IsNumeric(Left(sFileName, 1)) Then 'beginnt mit Zahl
For x = Len(sFileName) To 1 Step -1
If IsNumeric(Left(sFileName, x)) Then Exit For
Next x
ExtractNumbers = Left(sFileName, x)
Else 'beginnt mit Text
End If
End Function
Die Funktion ExtractNumbers ist noch nicht gänzlich fertig, denn es werden nur deine Tabellen welche mit einer Zahl beginnen erkannt. Den zweiten Teil musst du noch einfügen ODER deine Namens-Struktur vereinheitlichen, was ja nicht immer möglich ist.
Aber ich denke dieser Teil hilft dir schonmal weiter.
lg Matthias

Anzeige
AW: Neuste Dateiversion öffnen bei vers. Dateina
29.10.2015 15:36:34
matthias
So auch hier das nachgereicht.
Private Function ExtractNumbers(sFileName As String) As Long
Dim x As Long
If IsNumeric(Left(sFileName, 1)) Then 'beginnt mit Zahl
For x = Len(sFileName) To 1 Step -1
If IsNumeric(Left(sFileName, x)) Then Exit For
Next x
'ExtractNumbers = Left(sFileName, x)
ElseIf InStr(1, sFileName, "issue") > 0 Then 'beginnt mit Text
x = InStr(1, sFileName, "issue") + 5
ExtractNumbers = Trim(Mid(sFileName, x, InStr(1, sFileName, ".xls*") - x))
End If
End Function
Und ja, ich habe gemerkt, dass oben noch ".txt" steht statt "*xls*"
lg Matthias
Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige