2013-01-28 2 views
0

Я занимаюсь строительными функциями, которые используются в виде формул в ячейках и, похоже, попали в ловушку. Приведенный ниже код работает до тех пор, пока он не возвращает строку во время использования в ячейке. Этот код отлично работает для целых чисел и даже работает со строками, когда я закодировал sub для использования функции. Я не могу понять, почему, когда я использую его в формуле в ячейке она возвращаетСоздание функции для 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 

Вопрос заключается в том, что я не должен использовать функцию оценки. Формула, которую я втягивала, уже была решена. Так что скажите, что у меня был vlookup, который решил для «А». В коде X = "A" не строки ВПР (a1, a5: b10,2,0), как я первоначально ожидалось

+0

* Я не могу понять, почему, когда я использую его в формуле в ячейке, он возвращает *? вы что-то упустили? :) – bonCodigo

+1

Что вы хотите достичь с помощью своего кода? –

ответ

0

1. Всегда используйте Option Explicit

2.String является тип значения и не может быть Null ссылка.

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() вон» t рассчитывать автоматически. Для этого вам нужно использовать 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 
Смежные вопросы