2.1k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo,

ich suche eine VB Makro.

Ich möchte gerne das nach einer bestimmen abfrage z. B. "Dezember 2009" alle unterordner durchsucht werden (*Dezember 2009.xls) und die Dateien (gefundener) automatisch geöffnet werden.

Vielleicht noch ein Popup wieviele er gefunden hat.

Vielen Dank f. Eure hilfe

Gruß Blackcaty

7 Antworten

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

ein beispiel :-)

gruss nighty

Private strList() As String
Private ordlist() As String
Private lngCount As Long
Option Explicit

Public Sub Einlesen()
Dim Index As Integer
Dim Eingabe As String
lngCount = 0
Eingabe = "GesuchterDateiName" 'der string kann z.b. auch durch eine zelle bzw inputbox uebergeben werden
SearchFiles "C:\Excel", "*.xls"
If lngCount = 0 Then
MsgBox "No file found"
Exit Sub
End If
For Index = 0 To UBound(strList)
If strList(Index) = Eingabe & ".xls" Then
Workbooks.Open Filename:=ordlist(Index) & "\" & strList(Index)
Exit For
End If
Next Index
End Sub

Private Sub SearchFiles(strFolder As String, strFileName As String)
Dim objFolder As Object
Dim objFile As Object
Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
For Each objFile In objFSO.GetFolder(strFolder).Files
If objFile.Name Like strFileName Then
ReDim Preserve strList(lngCount)
ReDim Preserve ordlist(lngCount)
strList(lngCount) = objFile.Name
ordlist(lngCount) = strFolder
lngCount = lngCount + 1
End If
Next
For Each objFolder In objFSO.GetFolder(strFolder).Subfolders
SearchFiles strFolder & "\" & objFolder.Name, strFileName
Next
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

es werden 2 eindimensionale arrays genutzt,die durch eine function gefuellt werden

fuer den dateinamen
strList()

fuer den pfad
ordlist()

ausgelesen werden sie mit einer schleife

For Index = 0 To UBound(strList)

Next Index


anzupassen waeren

der startpfad ,der zur zeit ist

"C:\Excel", "*.xls"


und der gesuchte dateiname

Eingabe = "GesuchterDateiName"


gruss nighty
0 Punkte
Beantwortet von
SUPER so habe ich es mir vorgestellt !!!

eine kleine sache noch

ich würde gerne mit * (wildcat) suchen

z. B. * Dezember 2009.xls

alle Dateien die am ende mit Dezember 2009 beginnen sollen geöffnet werden.

kriegst du das noch hin ??

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

ersetze das makro Einlesen gegen dieses

gruss nighty

Public Sub Einlesen()
Dim Index As Integer
Dim Eingabe As String
lngCount = 0
Eingabe = "RechtsbuendigerTeilDateiNamen"
SearchFiles "C:\excel", "*.xls"
If lngCount = 0 Then
MsgBox "No file found"
Exit Sub
End If
For Index = 0 To UBound(strList)
If Len(strList(Index)) - 4 >= Len(Eingabe) Then
If Mid(strList(Index), Len(strList(Index)) - Len(Eingabe) - 4 + 1, Len(Eingabe)) = Eingabe Then
Workbooks.Open Filename:=ordlist(Index) & "\" & strList(Index)
Exit For
End If
End If
Next Index
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

entferne das exit for fuer eine beliebige anzahl von dateien

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

ein wenig optimiert

es sind nun beliebige teilstrings erlaubt die durch instr erfasst werden

gruss nighty

Public Sub Einlesen()
Dim Index As Integer
Dim Eingabe As String
lngCount = 0
Eingabe = "DeinSuchbegriff"
SearchFiles "C:\Temp", "*.xls"
If lngCount = 0 Then
MsgBox "No file found"
Exit Sub
End If
For Index = 0 To UBound(strList)
If InStr(strList(Index), Eingabe) > 0 Then
Workbooks.Open Filename:=ordlist(Index) & "\" & strList(Index)
End If
Next Index
End Sub
0 Punkte
Beantwortet von
PERFEKT !!!!


Lieben Dank nighty

Blackcaty
...