当我尝试向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
答案 0 :(得分:1)
您在错误的对话框中使用了筛选器。 .Filters
将与值为1
的 msoFileDialogOpen 或值为3
的 msofiledialogfilepicker 一起使用。因此,按如下所示尝试将.Filters
与Application.FileDialog(1)
或Application.FileDialog(3)
一起使用,它可以工作,但不能与值为{{1}的 msofiledialogsaveas 一起工作。 }
Microsoft Access不支持常量2
和msoFileDialogOpen
。 这不是什么意思:msoFileDialogSaveAs
没有被支持。 这是什么意思:不支持常量。如果您在MS Access的“即时窗口”中键入Application.FileDialog
,将看不到任何值,因此我们必须按原样传递这些值或声明它们。
?msoFileDialogOpen
而不是.Filters
查看此示例
.Filter
屏幕截图
编辑:
如果您要在保存时使用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
谢谢!