Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA使用AHTCommonOpenFilesSave和ahtOFN\u ALLOWMULTISELECT,选择单个文件时出错_Vba_Ms Access - Fatal编程技术网

VBA使用AHTCommonOpenFilesSave和ahtOFN\u ALLOWMULTISELECT,选择单个文件时出错

VBA使用AHTCommonOpenFilesSave和ahtOFN\u ALLOWMULTISELECT,选择单个文件时出错,vba,ms-access,Vba,Ms Access,也许我忽略了显而易见的结果,但我不知道如何处理数组中的单个结果 我在VBA中使用以下代码启用选择多个文件 Private Sub btn_openfiles_Click() Dim strFilter As String Dim strInputFileName As String Dim strFiles() As String Dim a As Long strFilter = ahtAddFilterItem(strFilter, "Images

也许我忽略了显而易见的结果,但我不知道如何处理数组中的单个结果

我在VBA中使用以下代码启用选择多个文件

Private Sub btn_openfiles_Click()
    Dim strFilter As String
    Dim strInputFileName As String
    Dim strFiles() As String
    Dim a As Long

    strFilter = ahtAddFilterItem(strFilter, "Images (*.PNG)", "*.PNG")

    strFiles = ahtCommonFileOpenSave( _
                        Filter:=strFilter, _
                        OpenFile:=True, _
                        InitialDir:="T:\DTP\Programs\Default\", _
                        DialogTitle:="Please select an input file...", _
                        Flags:=ahtOFN_EXPLORER + ahtOFN_ALLOWMULTISELECT)
    If IsArray(strFiles) Then
        For a = 0 To UBound(strFiles)
            Me.test_filenames = Me.test_filenames & strFiles(a) & vbCrLf
        Next a
    Else
        Me.test_filenames = strFiles
    End If

End Sub
我知道结果是一个数组,因为我正在设置ahtOFN\u ALLOWMULTISELECT标志。当选择多个文件时,这会很顺利。但如果只选择了一个文件,则

抛出错误13(strfile上的类型不匹配)

因为ahtCommonFileOpenSave的返回值不是数组。
我可以通过向ahtCommonFileOpenSave生成的数组添加一个伪值来强制使用数组类型,并在处理表单中的文件名时忽略这一点,但也许有更好的解决方案。有人有什么建议吗?

正如我已经提到的,忽略了显而易见的问题。将变量类型更改为variant成功了。当选择多个文件时,ahtComminFileOpenSave将返回完整的数组,并且始终为变量类型。Luuk的建议也有效(当变量类型被省略时,默认情况下会使用变量类型)。 修正后的代码是这样的,工作起来很有魅力

Private Sub btn_openfiles_Click()
Dim strFilter As String
Dim strInputFileName As String
Dim varFiles As Variant
Dim a As Long

strFilter = ahtAddFilterItem(strFilter, "Images (*.PNG)", "*.PNG")
Me.test_filenames = ""

varFiles = ahtCommonFileOpenSave( _
                    Filter:=strFilter, _
                    OpenFile:=True, _
                    InitialDir:="T:\DTP\Programs\Default\", _
                    DialogTitle:="Please select an input file...", _
                    Flags:=ahtOFN_EXPLORER + ahtOFN_ALLOWMULTISELECT)

If IsArray(varFiles) Then
    For a = 0 To UBound(varFiles)
        Me.test_filenames = Me.test_filenames & varFiles(a) & vbCrLf
    Next a
Else
    Me.test_filenames = varFiles
End If
结束子文件

尺寸标准文件()更改为字符串
尺寸标准文件
。如果选择了一个文件,此函数将返回一个字符串,如果选择了多个文件,则返回一个数组。另一个建议,请参阅: