MSAccess-运行时错误'438':对象不支持此属性或方法

时间:2019-08-19 01:01:57

标签: vba ms-access filedialog

当我尝试向FileDialog添加过滤器时遇到错误。

我试图通过多篇文章/文章对此进行故障排除,但似乎没有任何解决方法。联机文档标识使用.Filters.Add,但.Filters似乎不是合适的方法。 .Filter.Add至少可以识别,但仍然无效。 .Filter.Clear也可以识别,但也无效。

代码:

Private Sub Command93_Click()
    Dim objFD As Object, strOut As String

    Set objFD = Application.FileDialog(2)

    With objFD
    .Filter.Clear
    .Filter.Add "Excel File", ".xls"

    If objFD.show = -1 Then
        strOut = objFD.selecteditems(1)
    End If

    End With

    Set objFD = Nothing
    Me.txtSaveFile = strOut
    Me.Refresh
End Sub

2 个答案:

答案 0 :(得分:1)

  1. 您在错误的对话框中使用了筛选器。 .Filters将与值为1 msoFileDialogOpen 或值为3 msofiledialogfilepicker 一起使用。因此,按如下所示尝试将.FiltersApplication.FileDialog(1)Application.FileDialog(3)一起使用,它可以工作,但不能与值为{{1}的 msofiledialogsaveas 一起工作。 }

  2. Microsoft Access不支持常量2msoFileDialogOpen这不是什么意思msoFileDialogSaveAs没有被支持。 这是什么意思:不支持常量。如果您在MS Access的“即时窗口”中键入Application.FileDialog,将看不到任何值,因此我们必须按原样传递这些值或声明它们。

  3. 您必须使用?msoFileDialogOpen而不是.Filters

查看此示例

.Filter

屏幕截图

enter image description here

编辑:

如果您要在保存时使用Option Explicit Const msoFileDialogOpen As Integer = 1 Sub Sample() Dim f As Object Dim i As Long Set f = Application.FileDialog(msoFileDialogOpen) With f .Filters.Clear .Filters.Add "Excel File", "*.xls*" .AllowMultiSelect = True If .Show Then For i = 1 To .SelectedItems.Count MsgBox .SelectedItems(i) Next End If End With End Sub ,请查看链接Display Open and Save As Dialog Boxes in Access with API Functions

在这里,您将了解如何在使用Filters的{​​{1}}中使用过滤器

答案 1 :(得分:0)

好的,这就是答案。首先,由于上述解决问题的方法,因为它们确实导致我(再次)阅读文档并进行了其他尝试。第一个答案使我想到了这个问题,因为.Filters根本无法与msoFileSaveAs对话框一起使用。但是,您不能在“打开”对话框中键入其他文件名(1或3)。

所以答案是使用msoFileSaveAs或(2)并使用.Initialfilename属性来设置扩展名,在这种情况下,将显示可以选择,选择或修改的excel文件列表,然后您可以点击“保存”

工作代码:

Private Sub Command93_Click()
Dim objFD As Object
Dim strOut As String


Set objFD = Application.FileDialog(2)

With objFD
'.Filters.Clear
'.Filters.Add "Excel File", "*.xls; *.xlsx", 1
.Initialfilename = "*.xlsx"
If .show = -1 Then
    strOut = objFD.selecteditems(1)
End If

End With

Set objFD = Nothing
Me.txtSaveFile = strOut
Me.Refresh
End Sub

谢谢!