excel - 在 VBA 的 UDF 中将单元格作为参数传递的正确方法是什么?

标签 excel vba parameter-passing user-defined-functions

我正在尝试创建一个 UDF,它采用引用单元格的值,根据范围测试该值,并根据它是否适合该范围,将产生“X”或“O”。这是我可以让它工作的唯一方法:

代码:

Public Function ASE(cellRef As Variant)

    Dim setpointU As Integer, setpointL As Integer
    Dim enabled As String, disabled As String

    cellValue = Range(cellRef).Value
    setpointL = 50
    setpointU = 100
    enabled = "O"
    disabled = "X"

        If cellValue >= setpointL Or cellValue <= setpontU Then
            ASE = enabled
        Else
            ASE = disabled
        End If

End Function

公式栏中的函数: =AsE("D7")//(出于某种原因,它会自动将 s 变为小写)
结果: X
其他可能有用的信息: D7 的值为 24 ,来自单元格的函数, =VALUE(已导入!B5)

详细地说,我可以让它在技术上工作的唯一方法是满足两个条件:1)当我在引用的单元格周围的函数中使用引号时,以及 2)当参数 cellRef 是 Variant 时。如果我不使用引号 [=ASE(D7) 而不是 =ASE("D7")],它就不起作用。如果我将 cellRef 的数据类型更改为 Range 或 String,它就不起作用。它只会返回 #值(value)! 错误。

我应该如何格式化它,这样我就不必在引用的单元格周围使用引号?

最佳答案

要传递单元格本身(不带引号):

Public Function ASE(cellRef As Range)

    Dim setpointU As Integer, setpointL As Integer
    Dim enabled As String, disabled As String

    cellValue = cellRef.Value
    setpointL = 50
    setpointU = 100
    enabled = "O"
    disabled = "X"

        If cellValue >= setpointL Or cellValue <= setpointU Then
            ASE = enabled
        Else
            ASE = disabled
        End If

End Function

关于excel - 在 VBA 的 UDF 中将单元格作为参数传递的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61708390/

相关文章:

sql - Excel VBA,如何进行多个数据库条目

Delphi-将参数传递给 ADOquery

c - 在 C 中传递和返回变量

excel - 打开文件和刷新数据连接的 VBA 语法错误

c++ - 由 C 编译为 DLL 的随机函数无法正常工作

VBA - 在 a 范围内加 1 小时

sql - 如何从 adodb 记录集 Excel VBA 中的一列中选择不同的值?

vba - 在 VBA 中,如何将键盘快捷键恢复为默认值?

c++ - 从函数 BY VALUE 返回数组,当返回结构时会发生什么?

linux - 如何根据多个条件将大文件 ".csv"分成小文件?