【问题标题】:VBA sub call gives "compile error: Type mismatch: array or user-defined type expected"VBA 子调用给出“编译错误:类型不匹配:预期数组或用户定义类型”
【发布时间】:2013-10-31 01:51:03
【问题描述】:

我有 2 个 Subs,都接收数组作为参数。一个工作正常,另一个给出:编译错误:类型不匹配:预期数组或用户定义类型。 在下面编写的代码中,“InitializeArray”有效,“PresentTotalRow”无效。 谁能弄清楚为什么?

Sub PresentTotalRow(nCells As Integer, totalProductsPerDay() As Integer)
    row = nCells + MatrixRowOffset + 2
    Range(Cells(row, 2), Cells(row, 8)) = totalProductsPerDay
End Sub

Sub InitializeArray(ByRef arr() As Long)
    Dim N As Long
    For N = LBound(arr) To UBound(arr)
        arr(N) = 0
    Next N
End Sub


Sub ReadTxtFile()
    .....

    Dim totalProductsPerDay(0 To 6) As Long
    InitializeArray totalProductsPerDay

    Dim filePath As String
    filePath = "C:\work\Documents\input.txt"

    Dim oFS As TextStream
    If oFSO.FileExists(filePath) Then

        Set oFS = oFSO.OpenTextFile(filePath)
        ......
        i = 1
        Do While Not oFS.AtEndOfStream

            line = oFS.ReadLine
            ....
            nCells = calcNCells                

            totalProductsCounter = GetTotalProductsCounter()
            totalProductsPerDay(Day) = totalProductsPerDay(Day) + totalProductsCounter

            i = i + 1
        Loop

        PresentTotalRow nCells, totalProductsPerDay
        oFS.Close
    Else
        MsgBox "The file path is invalid.", vbCritical, vbNullString
    Exit Sub
End If

Exit Sub

End Sub

谢谢, 李

【问题讨论】:

    标签: arrays excel argument-passing vba


    【解决方案1】:
    Sub PresentTotalRow(nCells As Integer, totalProductsPerDay() As Integer)
        row = nCells + MatrixRowOffset + 2
        Range(Cells(row, 2), Cells(row, 8)) = totalProductsPerDay
    End Sub
    

    第二个参数需要一个整数数组

    PresentTotalRow nCells, totalProductsPerDay
    

    你在这里传递一个长数组作为第二个参数

    【讨论】:

    • 谢谢。我多么愚蠢。错误信息让我很困惑,我还以为数组不被识别为数组...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 2019-01-16
    相关资源
    最近更新 更多