Como obtenho um único nome de arquivo de um objeto de diálogo de arquivo no VBA (para MS Access 2007)?
-
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
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