Форум по VBA и MS Office

VBA, Excel => VBA, макросы в Excel => Тема начата: Посетитель 05.02.2025 от 05 февраля 2025, 18:18

Название: Как передать параметр типа Range в function?
Отправлено: Посетитель 05.02.2025 от 05 февраля 2025, 18:18
Написал функцию, которую хочу поместить в ячейку Excelя.

Public Function AauseByRef(ByVal r1 As Range, ByRef r2 As Range) As Long
   
    MsgBox r1.row, vbOK, "My Info"
    r2.Cells(r2.row, r2.Column).Value = r1.Cells(r1.row, r1.Column).Value / 2#
   
    AauseByRef = r1.row
    Exit Function
end function

Собственно, что именно делается в функции в данном случае неважно.
Вопрос: Как правильно передать в эту функцию произвольно выбранный мышкой на листе Range?
byRef?
byVal?

Public Function AauseByRef(ByRef r1 As Range,

Функцию задействую через строку ввода формул в ячейку (fx).
Появляется диалоговое окно, приглашающее ввести значения параметров, щёлкаю по маленькой иконке справа от строки ввода параметров и выбираю мышкой диапазон на листе. Аналогично со вторым параметром. Но ничего не работает.
Такое впечатление, что тип параметров указан неправильно. Но в строке формул выглядит вполне изящно: AauseByRef(C4:C33, F5:F14).
Однако, MsgBox в функции показывает чушь, причём, несколько раз показывается.

Как решить проблему?
Название: Как передать параметр типа Range в function?
Отправлено: Администратор от 05 февраля 2025, 19:35
Здесь:
r2.Cells(r2.row, r2.Column).Value = r1.Cells(r1.row, r1.Column).Value / 2#

зачем вы используете символ # после 2?
Название: Как передать параметр типа Range в function?
Отправлено: Администратор от 05 февраля 2025, 19:38
Создайте функцию, чтобы я мог у себя запустить и понять, почему не работает.
Т.е. не просто что-то запишите в функцию, а чтобы функция делала какое-нибудь действие.