Для отладки пользовательской функции нужно как-то передать в нее адрес, где функция находится, т.к. функция обращается к другим ячейкам относительно своего адреса. Как это сделать для отладки, ведь при отладке функция не введена ни в одну ячейку.
Для отладки пользовательской функции нужно как-то передать в нее адрес, где функция находится, т.к. функция обращается к другим ячейкам относительно своего адреса. Как это сделать для отладки, ведь при отладке функция не введена ни в одну ячейку.Bamboo
KuklP, А что вы имеете ввиду ввести? Записать в ячейку и поставить на нее курсор? Функция у меня введена в каждую ячейку одного столбца. Или удалить все кроме одной и оставить в одной ячейке?
KuklP, А что вы имеете ввиду ввести? Записать в ячейку и поставить на нее курсор? Функция у меня введена в каждую ячейку одного столбца. Или удалить все кроме одной и оставить в одной ячейке?Bamboo
KuklP все правильно говорит: В теле функции где идет перебор диапазона .address выдаст адрес текущей ячейки типа: for each cel in range переменная = cel.address next cel
Это где я такое говорил? Наглая клевета! address выдаст адрес той ячейки(диапазона), которую(ый) ей укажут. [vba]
Код
Public Function RngAdr$(rng As Range) Dim c As Range For Each c In rng.Cells Debug.Print c.Address Next RngAdr = Application.ThisCell.Address End Function
[/vba] Введите в любую ячейку формулу "=RngAdr(A1:B2)" и посмотрите, что она выдаст и что в immediate напишет.
KuklP все правильно говорит: В теле функции где идет перебор диапазона .address выдаст адрес текущей ячейки типа: for each cel in range переменная = cel.address next cel
Это где я такое говорил? Наглая клевета! address выдаст адрес той ячейки(диапазона), которую(ый) ей укажут. [vba]
Код
Public Function RngAdr$(rng As Range) Dim c As Range For Each c In rng.Cells Debug.Print c.Address Next RngAdr = Application.ThisCell.Address End Function
[/vba] Введите в любую ячейку формулу "=RngAdr(A1:B2)" и посмотрите, что она выдаст и что в immediate напишет.KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
_Boroda_, Не получилось в режиме отладки выдает ошибку "Run-time error:1004 Method ThisCel of object Application failed" Вод код проверочной функции: [vba]
Код
Function TS() TS = Application.ThisCell.Address End Function
[/vba] Вот код макроса для запуска: [vba]
Код
Public Sub Test2() Dim J J = TS() End Sub
[/vba]
При этом функция введенная на листе дает правильный результат.
Как отладить функцию?
_Boroda_, Не получилось в режиме отладки выдает ошибку "Run-time error:1004 Method ThisCel of object Application failed" Вод код проверочной функции: [vba]
Код
Function TS() TS = Application.ThisCell.Address End Function
[/vba] Вот код макроса для запуска: [vba]
Код
Public Sub Test2() Dim J J = TS() End Sub
[/vba]
При этом функция введенная на листе дает правильный результат.
Если отладку из ячейки делать, то ставьте бряк (F9) на строке с оператором. В ячейке с формулой пробел после всего выражения и жмём энтер А если из другого макроса запускать, то адрес нужно передать и ThisCell закомментить.
Если отладку из ячейки делать, то ставьте бряк (F9) на строке с оператором. В ячейке с формулой пробел после всего выражения и жмём энтер А если из другого макроса запускать, то адрес нужно передать и ThisCell закомментить.Udik
вот вам барабан яд 41001231307558 wm R419131876897 udik1968@gmail.com
Сообщение отредактировал Udik - Вторник, 29.03.2016, 17:40
Ну либо через глобальную переменную, либо через аргумент функции (т.е. на время отладки добавляем аргумент, а потом убираем. Через глобальную переменную попроще )
Ну либо через глобальную переменную, либо через аргумент функции (т.е. на время отладки добавляем аргумент, а потом убираем. Через глобальную переменную попроще )Udik
вот вам барабан яд 41001231307558 wm R419131876897 udik1968@gmail.com