Como obtenho um único nome de arquivo de um objeto de diálogo de arquivo no VBA (para MS Access 2007)?

StackOverflow https://stackoverflow.com/questions/2158675

  •  23-09-2019
  •  | 
  •  

Pergunta

Como altero meu código para obter o nome do arquivo em vez do nome do diretório? openDialog.InitialFilename me dá o nome do diretório.
openDialog.FileName Me dá o erro "Método ou membro de dados não encontrado".

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
Foi útil?

Solução

Você quer:

OpenDialog.SelectedItems.Item(1)

No lugar de:

OpenDialog.InitialFileName

Como você não permitiu multisselect.


Então:

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

Se o allowMultisElect for usado, você precisará iterar através do 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

Outras dicas

Eu precisava selecionar um único arquivo de texto ... foi o que eu fiz ... funcionou bem.

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

Além disso ... você pode substituir o tipo de diálogo por ...

Set dialog = Application.FileDialog(msoFileDialogOpen)

E funcionou igualmente bem.

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"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top