为excel构建一个返回字符串的函数

时间:2013-01-28 18:23:17

标签: vba excel-vba excel

我正在练习构建在单元格中用作公式的函数,似乎遇到了障碍。只要在单元格中使用时没有返回字符串,下面的代码就可以工作。这个代码适用于整数,甚至可以在我编写子函数时使用字符串来使用函数。我似乎无法弄清楚为什么当我在一个单元格的公式中使用它时它返回

Function bIsBlank(x As String) As String

Dim y As String

If x = "" Then  'check to see if it is blank
    Exit Function
Else 
    y = Evaluate(x) 'solve the formula that is pulled in

    If y = "0" Then 'check to see if formula equals zero
        y = ""      'set to nothing if it is zero
    End If
End If

    'below is my attempt to fix it by adding quotes on either side of the string
    'this did not work
    y = Chr(34) & y & Chr(34)

'this seems to solve for a sub but not a formula in a cell for strings
bIsBlank = y

End Function

问题是我不需要使用evaluate函数。我拉入的公式已经解决了。所以说我有一个解决“A”的vlookup。在代码X =“A”而不是字符串vlookup(a1,a5:b10,2,0),正如我原先预期的那样

2 个答案:

答案 0 :(得分:0)

1.始终使用Option Explicit

2. String是值类型,不能是Null引用。

答案 1 :(得分:0)

这是你在尝试的吗?

Option Explicit

Function bIsBlank(Optional x As String) As String
    Dim y As String

    bIsBlank = ""

    If x = "" Then Exit Function

    y = Application.Evaluate(x)

    If y = 0 Then bIsBlank = "" Else _
    bIsBlank = y
End Function

各种情景

enter image description here

enter image description here

注意:输入公式然后更改单元格中的值A1:A10后,bIsBlank()将不会自动计算。您必须使用Application.Volatile。见下面的例子

Option Explicit

Function bIsBlank(Optional x As String) As String
    Dim y As String

    Application.Volatile

    bIsBlank = ""

    If x = "" Then Exit Function

    y = Application.Evaluate(x)

    If y = 0 Then bIsBlank = "" Else _
    bIsBlank = y
End Function