相关疑难解决方法(0)

关键字Set在VBA中实际做了什么?

希望这是一个简单的问题,但我非常喜欢这个技术答案!

有什么区别:

i = 4
Run Code Online (Sandbox Code Playgroud)

Set i = 4
Run Code Online (Sandbox Code Playgroud)

在VBA?我知道后者会抛出错误,但我不完全理解为什么.

vba variable-assignment

149
推荐指数
4
解决办法
20万
查看次数

案例函数在Excel中等效

我有一个有趣的挑战 - 我需要在Excel中检查以下数据:

|   A  -   B  -   C  -  D   |
|------|------|------|------|
|  36  |   0  |   0  |   x  |
|   0  |  600 |  700 |   x  |
|___________________________|
Run Code Online (Sandbox Code Playgroud)

你必须原谅我糟糕的ASCII艺术.所以我需要D列(x)对相邻的单元格进行检查,然后在必要时转换值.这是标准:

如果B栏大于0,一切都很好,我可以喝咖啡.如果它不符合该要求,那么我需要根据表格转换A1 - 例如,32 = 1420并放入D.不幸的是,A和它需要转换的内容之间没有任何关系,因此创建计算是不可能的.

在这种情况下,case或switch语句是完美的,但我不认为它是Excel中的本机函数.我也认为把一堆=IF()陈述连在一起会有点疯狂,在做出决定这是一个坏主意(我的生活故事)之前,我做了大约四次.

excel worksheet-function

49
推荐指数
4
解决办法
34万
查看次数

用于Excel VBA的LIFO(堆栈)算法/类

我想在VBA for Excel中实现"Stack"类.我想使用Last In First Out结构.以前有人遇到过这个问题吗?你知道外部库处理结构,如Stack,Hastable,Vector ......(除了原始的Excel Collection等...)

谢谢

excel stack vba

7
推荐指数
1
解决办法
1万
查看次数

Excel:将数组传递给用户定义函数 (VBA)

编辑:解决方案- 请参阅下面的原始问题

在将 {1,2,3} 这样的数组传递给 UDF 时,我发现需要考虑两件事:

  • 区域设置 - 请参阅答案 1。德国系统上的列表分隔符(通常)是“;” 因此我需要使用 {1 ; 2 ; 3}。

  • 传递的数组在函数中显示为二维数组。因此,它的第 n 个元素必须定位为 myArray(n, 1 )。忽略这给了我#VALUE!错误。

因此,一个简短的“选择案例”-UDF 可能如下所示:

Function SelCase(a1, a2, a3)
    For i = 1 To UBound(a2)
        If a2(i, 1) = a1 Then SelCase = a3(i, 1)
    Next
End Function
Run Code Online (Sandbox Code Playgroud)

称为(德语语言环境!):

=SelCase(A1;{1;2;3};{"a";"b";"c"})
Run Code Online (Sandbox Code Playgroud)

根据 A1 给出结果“a”、“b”或“c”,结果为 1、2 或 3。

更详细的“选择案例”-UDF 可以在这里找到。


原问题:

我想将像 {1,2,3,4} 这样的数组传递给 Excel 2002 中的用户定义函数 - 但没有设法找到执行此操作的方法。

我使用的是德语版本,所以“,”是我的小数分隔符,也分隔水平(1D-)数组中的值- 编辑:这是错误的 -,而“;” 据我所知,将公式中调用的函数中的参数与工作表分开,并且还分隔垂直(一维)数组中的值。

我尝试过类似的东西

Function test(myArray)
Function …
Run Code Online (Sandbox Code Playgroud)

arrays excel vba parameter-passing user-defined-functions

5
推荐指数
1
解决办法
2万
查看次数

处理数学函数中的错误

数学相关函数中错误处理的好习惯是什么?我正在建立一个专门的函数库(模块),我的主要目的是让调用这些函数的代码更容易调试 - 而不是制作一个闪亮的用户友好的错误处理工具.

下面是VBA中的一个简单示例,但我也有兴趣听取其他语言的说法.我不太确定我应该在哪里返回错误消息/状态/标志.作为额外的论点?

Function AddArrays(arr1, arr2)
    Dim i As Long
    Dim result As Variant

    ' Some error trapping code here, e.g.
    ' - Are input arrays of same size?
    ' - Are input arrays numeric? (can't add strings, objects...)
    ' - Etc.

    ' If no errors found, do the actual work...
    ReDim result(LBound(arr1) To UBound(arr1))
    For i = LBound(arr1) To UBound(arr1)
        result(i) = arr1(i) + arr2(i)
    Next i

    AddArrays = result
End Function
Run Code Online (Sandbox Code Playgroud)

或类似以下内容.该函数返回一个布尔"成功"标志(如下例所示,如果输入数组不是数字等,则返回False),或者某个其他类型的错误号/消息.

Function AddArrays(arr1, arr2, result) As …
Run Code Online (Sandbox Code Playgroud)

math error-handling vba

3
推荐指数
1
解决办法
2129
查看次数