gpt4 book ai didi

arrays - vba 变体数组错误

转载 作者:行者123 更新时间:2023-12-04 22:09:32 26 4
gpt4 key购买 nike

我对 excel vba 还很陌生,我似乎无法用 vbArrays 解决这个问题。我在 vba 中创建了函数 cumsum 只是为了让我的生活更轻松。但是,我想让代码灵活,这样我就可以从函数和范围中传递两种变体。在我的代码中,当我添加行 vec=vec.value 如果我传入一个范围时,它工作得非常好,但如果我希望它在我调用函数并传入非范围类型时工作,它就不起作用.我注意到的是,如果我的代码中没有 vec=vec.value 行并且我传入一个范围,它的维度为 0,我通过编写自己的函数进行检查。有人可以向我解释如何解决这个问题吗?谢谢。

Public Function cumsum(vec As Variant) As Variant
Dim temp() As Variant
MsgBox (getDimension(vec))
'works if i use vec=vec.value if vec is a range but has 0 if i do not vec = vec.values
ReDim temp(LBound(vec, 1) To UBound(vec, 1), 1 To 1) As Variant
Dim intCounter As Integer
For intCounter = LBound(vec) To UBound(vec)
If intCounter = LBound(vec) Then
temp(intCounter, 1) = vec(intCounter, 1)
Else
temp(intCounter, 1) = temp(intCounter - 1, 1) + vec(intCounter, 1)
End If
Next
cumsum = temp()
End Function
Function getDimension(var As Variant) As Integer
On Error GoTo Err:
Dim i As Integer
Dim tmp As Integer
i = 0
Do While True:
i = i + 1
tmp = UBound(var, i)
Loop
Err:
getDimension = i - 1
End Function

最佳答案

为什么不检查 vec 的数据类型?通过使用 VarTypeTypeName然后对 vec 执行必要的操作

Public Function cumsum2(vec As Variant) As Variant
MsgBox TypeName(vec)
MsgBox VarType(vec)

cumsum2 = 0
End Function

关于arrays - vba 变体数组错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11582830/

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