Forumbeitrag
Excel-Version des Fragestellers:
2022
Erfahrungslevel des Fragestellers:
Excel-Profi - VBA gut
Hallo Excelaner,
ich verstehe nicht, warum nachfolgender Code nicht geht:
Sub Test()
Dim oFile As Object, oFiles As Object
Set oFiles = File_Open("Dateien wauswählen", "D:\KOFFER\Download", "*.pdf", True)
For Each oFile In oFiles
Debug.Print oFile.Name
Next oFile
End Sub
Function File_Open(sPrompt As String, sFolder As String, sFilePattern As String, Optional bMulti As Boolean = False) As Object
'
Dim sType As String, sExt As String
Dim f As Office.FileDialog, sWildcard As String
Set f = Application.FileDialog(msoFileDialogFilePicker)
If Right(sFolder, 1) <> "\" Then sFolder = sFolder & "\"
sExt = LCase(Mid(sFilePattern, InStrRev(sFilePattern, ".", -1, vbTextCompare) + 1))
Select Case sExt
Case "pdf"
sType = "PDF-Datei"
Case "xlsx"
sType = "Excel-Datei"
Case Else
sType = "Text-Datei"
End Select
sWildcard = "*." & sExt
With f
.Title = sPrompt & " auswählen"
.AllowMultiSelect = bMulti
.ButtonName = "Auswählen"
.Filters.Clear
.Filters.Add sType, sWildcard, 1
.InitialFileName = sFolder & sFilePattern
.InitialView = msoFileDialogViewDetails
' Wenn der Benutzer OK klickt
If .Show = -1 Then
' Rückgabe des SelectedItems-Objekts
Set File_Open = .SelectedItems
Else
' Nichts ausgewählt?
Set File_Open = Nothing
End If
End With
Fehler 424: Objekt erforderlich. "oFile" ist aber als Objekt deklariert.
In der Microsoft-Referenz dazu steht, daß "oFile" entweder ein Objekt oder ein Variant sein kann, letzteres funktioniert zwar, ist aber in der nachfolgende Verwendung recht umständlich.
Mit einer for-each-Schleife über ein Verzeichnis funktioniert es mit oFile als Objekt. Aber ich möchte über den Open_File_Dialog nur einzelne Dateien auswählen, nicht alle.
Sub TestFiles()
Dim oFile As Object, oFiles As Object, oFolder As Object
Dim oFS As Object
Set oFS = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFS.GetFolder("D:\KOFFER\Download")
For Each oFile In oFolder.Files
Debug.Print oFile.Name
Next oFile
End Sub
Schon mal Danke im Voraus