Как получить одно имя файла из объекта File Dialog в VBA (для MS Access 2007)? - PullRequest
6 голосов
/ 29 января 2010

Как мне изменить мой код, чтобы получить имя файла вместо имени каталога? 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

Ответы [ 3 ]

13 голосов
/ 29 января 2010

Вы хотите:

OpenDialog.SelectedItems.Item(1)

Вместо:

OpenDialog.InitialFileName

Так как вы не разрешили множественный выбор.


Итак:

''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

Если используется 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
1 голос
/ 08 декабря 2012

Мне нужно было выбрать один текстовый файл ... это то, что я сделал ... он работал нормально.

' Get the File
'----------------------------------------------------------
Dim dialog As Object
Dim pickedfile As Boolean
Dim myfile As String
Set dialog = Application.FileDialog(msoFileDialogFilePicker)
With dialog
    .AllowMultiSelect = False
    .Title = "Please pick the file to convert."
    .Filters.Clear
    .Filters.Add "Text Files", "*.TXT"
    .Filters.Add "All Files", "*.*"
    pickedfile = False
    pickedfile = .Show
    If pickedfile Then
    myfile = .SelectedItems.Item(1)
    End If
End With
'----------------------------------------------------------

Дополнительно ... вы можете заменить тип диалога на ...

Set dialog = Application.FileDialog(msoFileDialogOpen)

и это сработало одинаково хорошо.

0 голосов
/ 13 марта 2013
Private Sub Command135_Click()

Dim dialog As Object
Dim pickedfile As Boolean
Dim myfile As String
Set dialog = Application.FileDialog(1)
With dialog
    .AllowMultiSelect = False
    .Title = "Please pick the file to convert."
    .Filters.Clear
    .Filters.Add "Picture Files", "*.Jpg"
    .Filters.Add "All Files", "*.*"
    pickedfile = False
    pickedfile = .Show
    If pickedfile Then
    myfile = .SelectedItems.Item(1)
    End If
End With

Me.Form.Picture = myfile
End Sub


Command_135=Button Name
Me.Form.Picture = "The Control Name"
...