简体   繁体   English

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

[英]Excel VBA Array() function causing type mismatch?

I've created the following function to look for files and give errors if the files aren't found: 我创建了以下函数来查找文件并在找不到文件时给出错误:

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

When I go to call it, I get a type mismatch error though. 当我去调用它时,我得到了类型不匹配错误。 This happens with a predefined array and also when trying to use the Array() 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)

This also happens if arrFileNames() is a Variant. 如果arrFileNames()是Variant,也会发生这种情况。 What am I doing wrong? 我究竟做错了什么?

Array doesn't return a typed array (eg String() ). Array不返回类型化数组(例如String() )。

Change your signature to take a Variant instead: 更改您的签名以取代Variant

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

And you can always validate that you're looking at an actual array, with the IsArray function: 您可以使用IsArray函数始终验证您正在查看实际数组:

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

Also I'd warmly recommend changing your loop to a For...Next loop. 另外,我强烈建议将循环更改为For...Next循环。 Arrays don't want to be iterated with For Each - see this article . 数组不希望使用For Each进行迭代 - 请参阅此文章

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM