代码之家  ›  专栏  ›  技术社区  ›  Christopher Bottoms zerkms

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

  •  6
  • Christopher Bottoms zerkms  · 技术社区  · 15 年前

    如何更改代码以获取文件名而不是目录名? 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 回复  |  直到 10 年前
        1
  •  12
  •   Fionnuala    12 年前

    你想要:

    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
    
        2
  •  1
  •   Askjerry    12 年前

    我需要选择一个文本文件…这就是我所做的…它工作得很好。

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

    而且效果也很好。

        3
  •  0
  •   Rakesh    12 年前
    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"