/ / Excel VBA - Використання діапазонів як необов’язкових параметрів для функцій? - excel, vba, excel-vba, діапазон

Excel VBA - Використання діапазонів як необов'язкових параметрів для функцій? - excel, vba, excel-vba, діапазон

Я хотів би написати функцію 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

Я спробував функцію вище, але я отримую #VALUE! помилка. Я також спробував обернути цикл For всередині оператора If (R) Then ... End If.

Яким би був спосіб мати справу з необов’язковим діапазоном, де, якщо діапазон існує, він ітераціюється через цикл For Each?

Відповіді:

8 для відповіді № 1

Спробуйте це

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 для відповіді № 2

Обхідний шлях:

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