簡體   English   中英

Excel VBA Array()函數導致類型不匹配?

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

我創建了以下函數來查找文件並在找不到文件時給出錯誤:

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,也會發生這種情況。 我究竟做錯了什么?

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM