簡體   English   中英

VBA function 在 excel 2016 中返回數組時導致運行時錯誤 13 而不是在 Office 365 中?

[英]VBA function causing runtime error 13 while returning array in excel 2016 but not in office 365?

我有一個 function 讀取選項卡中的數據並將其作為一維數組返回:

Public Function OneDimension(arr)
    OneDimension = Application.Transpose(Application.Transpose(arr))
End Function

打開表單時調用 function:

Set actionDict = New Scripting.Dictionary
numArrCols = Data.Columns.Count - 1
ReDim arr(1 To numArrCols) 'empty array

For Each rw In Data.rows
    id = "" & rw.Cells(1).Value
    If Not actionDict.Exists(id) Then
        actionDict.Add id, New Collection 'new key: add key and empty collection
    End If
    actionDict(id).Add OneDimension(rw.Cells(2).Resize(1, numArrCols).Value) 'add the row value as 1D array
Next rw

數據如下所示:

用戶身份 名稱 日期 回答 數量 注釋 完全的 幫手
1個 測試,噸 05/22/2022 是的 0.01 某物 144687

用公式

helper = user id & date

user id是一個文本字段, date存儲為mm/dd/yyyy ,當我用 Office 365 運行它時它看起來很好,但是當我的老板用 excel 2016 運行它時它給出了這個錯誤:

runtime error 13 type mismatch

在調試器中使用這個:

調試器錯誤

是什么原因造成的?

單行范圍到一維數組

  • 為什么要使用功能有限的單線? 它們更短但通常不會更快。

  • 在你的子中,你可以使用:

     actionDict(id).Add OneDaRow(rw.Cells(2).Resize(1, numArrCols))

Function

Function OneDaRow(ByVal RowRange As Range) As Variant
    
    Dim Data As Variant ' 2D one-based one-row array
    Dim c As Long
    
    With RowRange.Rows(1)
        c = .Columns.Count
        If c = 1 Then ' one cell
            ReDim Data(1 To 1, 1 To 1): Data(1, 1) = .Value
        Else ' multiple cells
            Data = .Value
        End If
    End With
        
    Dim Arr As Variant: ReDim Arr(1 To c) ' 1D one-based array
    
    For c = 1 To c
        Arr(c) = Data(1, c)
    Next c
    
    OneDaRow = Arr

End Function

Function 測試

Sub OneDaRowTEST()
    Dim rg As Range: Set rg = Range("A1").CurrentRegion
    Debug.Print Join(OneDaRow(rg), vbLf)
End Sub

暫無
暫無

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

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