gpt4 book ai didi

excel - VBA函数在excel 2016中返回数组但在office 365中没有导致运行时错误13?

转载 作者:行者123 更新时间:2023-12-04 20:07:29 25 4
gpt4 key购买 nike

我有一个函数可以读取选项卡中的数据并将其作为一维数组返回:

Public Function OneDimension(arr)
OneDimension = Application.Transpose(Application.Transpose(arr))
End 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
数据如下所示:


用户身份
姓名
日期
回答
数量
注释
完全的
helper


1
测试,t
2022 年 5 月 22 日
是的
0.01
某物

144687


用公式
helper = user id & date
user id是一个文本字段, date存储为 mm/dd/yyyy ,当我用 Office 365 运行它时,它似乎很好,但是当我的老板用 excel 2016 运行它时,它给出了这个错误:
runtime error 13 type mismatch
在调试器中使用这个:
debugger error
这可能是什么原因造成的?

最佳答案

单行范围到一维数组

  • 为什么要使用功能有限的单行代码?它们更短,但通常不会更快。
  • 在您的潜艇中,您可以使用:
    actionDict(id).Add OneDaRow(rw.Cells(2).Resize(1, numArrCols))

  • 函数
    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
    功能测试
    Sub OneDaRowTEST()
    Dim rg As Range: Set rg = Range("A1").CurrentRegion
    Debug.Print Join(OneDaRow(rg), vbLf)
    End Sub

    关于excel - VBA函数在excel 2016中返回数组但在office 365中没有导致运行时错误13?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72178231/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com