Excel VBA - Использование диапазонов в качестве дополнительных параметров для функций? - PullRequest
5 голосов
/ 28 сентября 2010

Я хотел бы написать функцию VBA, у которой Range является необязательным параметром.Например что-то вроде:

Public Function testfunc(S As String, Optional R As Range) As String
testfunc = S
For Each cell In R
testfunc = testfunc + cell
Next cell
End Function

Я попробовал функцию выше, но я получаю # ЗНАЧЕНИЕ!ошибка.Я также попытался обернуть цикл For внутри оператора If (R) Then ... End If.

Каким образом можно справиться с необязательным Range, где, если диапазон существует, он повторяется черезчерез цикл For Each?

Ответы [ 2 ]

8 голосов
/ 28 сентября 2010

Попробуйте это

Public Function testfunc(S As String, Optional R As Range = Nothing) As String
    testfunc = S
    if not R is nothing then
        For Each cell In R
            testfunc = testfunc & cell
        Next cell
    end if
End Function

Я протестировал это в Excel 2007. Вам нужно поместить его в модуль, а не в разделы кода рабочей таблицы или рабочей книги. Затем функцию можно вызывать из VBA с объектом Range или без него, или как функцию рабочего листа.

0 голосов
/ 28 сентября 2010

Обходной путь:

Public Function testfunc(S As String, Optional R As String = vbNullString) As String
    testfunc = S

    If R <> vbNullString Then
        For Each cell In Range(R)
            ' & for concatenation not + '
            testfunc = testfunc & cell 
        Next cell
    End If
End Function

Sub test()
    MsgBox testfunc("", "A1:A5"), vbOKOnly, "Results"
    MsgBox testfunc(""), vbOKOnly, "Results"
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...