2017-05-04 2 views
0

Ich verwende eine Funktion in VBA für Excel, um nach einer Datei zu suchen und den Benutzer zur Auswahl von nicht gefunden zu bitten.VBA Excel FileDialog Rückgabe selecteditem als Objekt

Wenn ich die application.filedialogfilepicker die Datei auszuwählen, die .selecteditem(1) wird als String zurückkehrt, aber ich muss im Idealfall als Objekt zurück.

Gibt es eine Möglichkeit, dies zu konvertieren oder gehe ich von Anfang an falsch?

Public myDir As String 
Public newFilePath As String 
Public FileSys As Object 
Public myFolder 

    Function LoadFileName(FileStart As String, FileType As String) 
    newFilePath = ActiveWorkbook.Path 
    myDir = newFilePath & "\Daily reports" 
    ChDrive (Left(ActiveWorkbook.Path, 2)) 
    ChDir myDir 
    Set FileSys = CreateObject("Scripting.FileSystemObject") 
    Set myFolder = FileSys.GetFolder(myDir)   


    On Error GoTo FileNotFound 

    Dim dteFile As Date 
    Dim oFS As Object 
    Dim objFile As Object 
    Dim FileName As Object 
    Dim strFileToOpen As Office.FileDialog 

    dteFile = DateSerial(1900, 1, 1) 

    Set FileSys = CreateObject("Scripting.FileSysetmObject") 

    For Each objFile In myFolder.Files 
     If FileSys.GetFile(objFile).DateCreated >= dteFile And UCase(Left(objFile.Name, 3)) = FileStart Then 
     dteFile = FileSys.GetFile(objFile).DateCreated 
     Set FileName = objFile 
     End If 
    Next 

FileFound: 
    fileConfirm = MsgBox("Is " & FileName.Name & " the report you wish to use?", vbYesNoCancel + vbQuestion) 
    If fileConfirm = vbCancel Then 
    End 
    ElseIf fileConfirm = vbNo Then 
    GoTo SelectFile 
    ElseIf fileConfirm = vbYes Then 
    Set LoadFileName = FileName 
    Exit Function 
    End If 

FileNotFound: 
    MsgBox "Unable to find most recent report." & vbCrLf & _ 
      "Please select the file you wish to use.", vbInformation + vbOKOnly 
SelectFile: 
    Set strFileToOpen = Application.FileDialog(msoFileDialogFilePicker) 
    With strFileToOpen 
    .AllowMultiSelect = False 
    .Title = "Pleas select report to use." 
    .Filters.Clear 
    .Filters.Add "Excel", "*." & FileType & "*" 
    End With 

    If strFileToOpen.Show = -1 Then 
    FileName = strFileToOpen.SelectedItems(1) 
    GoTo FileFound 
    Else 
    forceBreak = MsgBox("No file has been selected. Would you like to try again?", vbExclamation + vbYesNo) 
     If forceBreak = vbNo Then 
     MsgBox "The CQUIN daily patient list cannot be generated without both EPIC and CHEQS reports." & _ 
       "Please ensure these have been run and saved in the correct locations.", vbCritical 
     End 
     Else 
     GoTo SelectFile 
     End If 

    End If 


    End Function 
+0

Welche Art von Objekt wollen Sie den Namen der Datei zu konvertiert werden? – YowE3K

+0

Welches "Objekt" soll es zurückgeben? Dieses Objekt würde sich mit dem Dateityp unterscheiden. Wenn Sie eine andere Excel-Datei öffnen müssen, verwenden Sie die [Workbooks.Open-Methode] (https://msdn.microsoft.com/en-us/library/office/ff194819.aspx) mit dem Dateinamen, den Sie aus dem Dialogfeld erhalten haben. –

+0

@ YowE3K Entschuldigung, hätte ich sagen sollen. Es ist ein Dateiobjekt. – Boon101083

Antwort

0

Ich habe es geschafft, die Lösung am Ende selbst zu finden. Für diejenigen, die es wollen, ist das, was mir fehlte:

Ich brauchte nur .GetFile zu verwenden ...

If strFileToOpen.Show = -1 Then 
    Set FileName = FileSys.GetFile(strFileToOpen.SelectedItems(1)) 
    GoTo FileFound 
    Else