如何从VBA中的文件对话框对象中获取单个文件名(对于MS Access 2007)?

Chr*_*oms 6 ms-access vba openfiledialog

如何更改代码以获取文件名而不是目录名?openDialog.InitialFilename给我目录名称.
openDialog.FileName给我错误"找不到方法或数据成员".

Private Sub btnEditPhoto_Click()
    If (txtImageName > "") Then

        Application.FollowHyperlink txtImageName

    Else
        Dim openDialog As Office.FileDialog

        Set openDialog = Application.FileDialog(msoFileDialogFilePicker)

            openDialog.Filters.Clear
            openDialog.Filters.Add "JPEG Files", "*.jpg"

        Dim pickedFile As Boolean
            pickedFile = openDialog.Show

        If pickedFile Then
                txtImageName.SetFocus
                txtImageName.Text = openDialog.InitialFileName
        End If

    End If

End Sub
Run Code Online (Sandbox Code Playgroud)

Fio*_*ala 13

你要:

OpenDialog.SelectedItems.Item(1)
Run Code Online (Sandbox Code Playgroud)

取代:

OpenDialog.InitialFileName
Run Code Online (Sandbox Code Playgroud)

因为你没有允许多选.


所以:

''Reference Microsoft Office x.x Object Library
Dim openDialog As Office.FileDialog

Set openDialog = Application.FileDialog(msoFileDialogFilePicker)
openDialog.Filters.Clear
openDialog.Filters.Add "JPEG Files", "*.jpg"

If openDialog.Show Then
    ''SelectedItems is not zero based

    ''Do not use .Text property in MS Access except
    ''in special cases, then you will not have to set focus
    ''txtImageName.SetFocus

    txtImageName = openDialog.SelectedItems(1)
End If
Run Code Online (Sandbox Code Playgroud)

如果使用AllowMultiSelect,则需要遍历SelectedItems

''Reference Microsoft Office x.x Object Library
Dim openDialog As Office.FileDialog
Dim i As Integer

Set openDialog = Application.FileDialog(msoFileDialogFilePicker)
'Use ctl or shift + click to select more than one file
openDialog.AllowMultiSelect = True
openDialog.Filters.Clear
openDialog.Filters.Add "JPEG Files", "*.jpg"

If openDialog.Show Then
    For i = 1 To openDialog.SelectedItems.Count
        Imagelst = Imagelst & ";" & openDialog.SelectedItems(i)
    Next
End If
Run Code Online (Sandbox Code Playgroud)