Excel VBA Array()函数导致类型不匹配?

银公爵

我创建了以下函数来查找文件并在未找到文件时给出错误:

Public Function checkFileExistence(arrFileNames() As String, Optional bShowErrMsg As Boolean = False) As Boolean
' This function looks for every file name in arrFileNames and returns True if all exist else False
' Optional: bShowErrMsg = True will tell the user which file was missing with a MsgBox
Dim file As Variant

For Each file In arrFileNames
    If Len(Dir(file, vbNormal)) = 0 Then
        checkFileExistence = False
        If bShowErrMsg = True Then MsgBox (file & " was not found.")
        Exit Function
    End If
Next file
checkFileExistence = True
End Function

当我去调用它时,我会遇到类型不匹配的错误。在预定义的数组中以及在尝试使用Array()函数时,都会发生这种情况:

.
Dim filesToFind(1 To 3) As String
filesToFind(1) = "image.png"
filesToFind(2) = "test.png"
filesToFind(3) = "test.fred"

Debug.Print checkFileExistence(filesToFind, True)
Debug.Print checkFileExistence(Array("image.png", "test.png", "test.fred"), True)

如果arrFileNames()是Variant,也会发生这种情况。我究竟做错了什么?

马修·金登(Mathieu Guindon)

Array不返回类型化数组(例如String())。

更改您的签名以Variant改为:

Public Function checkFileExistence(arrFileNames As Variant, Optional bShowErrMsg As Boolean = False) As Boolean

而且,您始终可以使用以下IsArray函数验证您在查看实际数组

    If Not IsArray(arrFileNames) Then Err.Raise 5, "CheckFileExistence", "Expected array, but received a " & TypeName(arrFileNames) & "."

另外,我也热烈建议将您的循环更改为For...Next循环。数组不想被迭代For Each-请参阅本文

For i = LBound(arrFileNames) To UBound(arrFileNames)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章