Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Передать в пользовательскую функцию, адрес где она находится - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Передать в пользовательскую функцию, адрес где она находится (Функции/Function)
Передать в пользовательскую функцию, адрес где она находится
Bamboo Дата: Понедельник, 28.03.2016, 16:28 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 56
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Для отладки пользовательской функции нужно как-то передать в нее адрес, где функция находится, т.к. функция обращается к другим ячейкам относительно своего адреса. Как это сделать для отладки, ведь при отладке функция не введена ни в одну ячейку.
 
Ответить
СообщениеДля отладки пользовательской функции нужно как-то передать в нее адрес, где функция находится, т.к. функция обращается к другим ячейкам относительно своего адреса. Как это сделать для отладки, ведь при отладке функция не введена ни в одну ячейку.

Автор - Bamboo
Дата добавления - 28.03.2016 в 16:28
_Boroda_ Дата: Понедельник, 28.03.2016, 16:30 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 9783
Репутация: 4134 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
ведь при отладке функция не введена ни в одну ячейку

Так введите в нужную ячейку и отлаживайте оттуда.
В первой строке кода функции брейк поставьте через F9


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
ведь при отладке функция не введена ни в одну ячейку

Так введите в нужную ячейку и отлаживайте оттуда.
В первой строке кода функции брейк поставьте через F9

Автор - _Boroda_
Дата добавления - 28.03.2016 в 16:30
KuklP Дата: Понедельник, 28.03.2016, 16:32 | Сообщение № 3
Группа: Проверенные
Ранг: Старожил
Сообщений: 2020
Репутация: 439 ±
Замечаний: 20% ±

Введите, кто не дает. И отлаживайте.
thiscell.address


Ну, с НДС и мы чего-то стoим! kuklp@mail.ru
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеВведите, кто не дает. И отлаживайте.
thiscell.address

Автор - KuklP
Дата добавления - 28.03.2016 в 16:32
Bamboo Дата: Понедельник, 28.03.2016, 16:37 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 56
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
KuklP, А что вы имеете ввиду ввести? Записать в ячейку и поставить на нее курсор?
Функция у меня введена в каждую ячейку одного столбца. Или удалить все кроме одной и оставить в одной ячейке?
 
Ответить
СообщениеKuklP, А что вы имеете ввиду ввести? Записать в ячейку и поставить на нее курсор?
Функция у меня введена в каждую ячейку одного столбца. Или удалить все кроме одной и оставить в одной ячейке?

Автор - Bamboo
Дата добавления - 28.03.2016 в 16:37
_Boroda_ Дата: Понедельник, 28.03.2016, 16:42 | Сообщение № 5
Группа: Модераторы
Ранг: Экселист
Сообщений: 9783
Репутация: 4134 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
удалить все кроме одной и оставить в одной ячейке?

Совершенно верно. Зачем Вам при отладке куча функций?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
удалить все кроме одной и оставить в одной ячейке?

Совершенно верно. Зачем Вам при отладке куча функций?

Автор - _Boroda_
Дата добавления - 28.03.2016 в 16:42
Bamboo Дата: Понедельник, 28.03.2016, 16:46 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 56
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
_Boroda_,
Цитата
Зачем Вам при отладке куча функций?

Они ссылаются на вычисления друг друга. Но можно и просто значений наставлять и пусть ссылается...
 
Ответить
Сообщение_Boroda_,
Цитата
Зачем Вам при отладке куча функций?

Они ссылаются на вычисления друг друга. Но можно и просто значений наставлять и пусть ссылается...

Автор - Bamboo
Дата добавления - 28.03.2016 в 16:46
Michael_S Дата: Понедельник, 28.03.2016, 16:49 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1731
Репутация: 332 ±
Замечаний: 0% ±

Excel2016
Они ссылаются на вычисления друг друга.
а циклические ссылки не возникают при этом?


ЯД: 41001136675053
WM: R389613894253
 
Ответить
Сообщение
Они ссылаются на вычисления друг друга.
а циклические ссылки не возникают при этом?

Автор - Michael_S
Дата добавления - 28.03.2016 в 16:49
zopa Дата: Вторник, 29.03.2016, 14:15 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 100% ±

Excel 2010
KuklP все правильно говорит:
В теле функции где идет перебор диапазона .address выдаст адрес текущей ячейки типа:

[vba]
Код

for each cel in range
переменная = cel.address
next cel
[/vba]

[moder]Код оформите согласно Правилам форума


Сообщение отредактировал zopa - Вторник, 29.03.2016, 15:18
 
Ответить
СообщениеKuklP все правильно говорит:
В теле функции где идет перебор диапазона .address выдаст адрес текущей ячейки типа:

[vba]
Код

for each cel in range
переменная = cel.address
next cel
[/vba]

[moder]Код оформите согласно Правилам форума

Автор - zopa
Дата добавления - 29.03.2016 в 14:15
Udik Дата: Вторник, 29.03.2016, 14:59 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1291
Репутация: 161 ±
Замечаний: 0% ±

Excel 2013
Без примера отвечать приходится наугад, например, введите дополнительный аргумент - текстовый адрес ячейки.

[vba]
Код

Public Function test1(addr As String) As String
Debug.Print addr
test1 = addr
End Function
[/vba]

а в ячейке будет такое:
Код

=test1(АДРЕС(СТРОКА();СТОЛБЕЦ()))


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеБез примера отвечать приходится наугад, например, введите дополнительный аргумент - текстовый адрес ячейки.

[vba]
Код

Public Function test1(addr As String) As String
Debug.Print addr
test1 = addr
End Function
[/vba]

а в ячейке будет такое:
Код

=test1(АДРЕС(СТРОКА();СТОЛБЕЦ()))

Автор - Udik
Дата добавления - 29.03.2016 в 14:59
KuklP Дата: Вторник, 29.03.2016, 15:38 | Сообщение № 10
Группа: Проверенные
Ранг: Старожил
Сообщений: 2020
Репутация: 439 ±
Замечаний: 20% ±

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 напишет.


Ну, с НДС и мы чего-то стoим! kuklp@mail.ru
WM Z206653985942, R334086032478, U238399322728
 
Ответить
Сообщение
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
Дата добавления - 29.03.2016 в 15:38
Bamboo Дата: Вторник, 29.03.2016, 17:21 | Сообщение № 11
Группа: Пользователи
Ранг: Участник
Сообщений: 56
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
_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]

При этом функция введенная на листе дает правильный результат.

Как отладить функцию?

Автор - Bamboo
Дата добавления - 29.03.2016 в 17:21
Udik Дата: Вторник, 29.03.2016, 17:38 | Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 1291
Репутация: 161 ±
Замечаний: 0% ±

Excel 2013
Если отладку из ячейки делать, то ставьте бряк (F9) на строке с оператором. В ячейке с формулой пробел после всего выражения и жмём энтер
А если из другого макроса запускать, то адрес нужно передать и ThisCell закомментить.


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Вторник, 29.03.2016, 17:40
 
Ответить
СообщениеЕсли отладку из ячейки делать, то ставьте бряк (F9) на строке с оператором. В ячейке с формулой пробел после всего выражения и жмём энтер
А если из другого макроса запускать, то адрес нужно передать и ThisCell закомментить.

Автор - Udik
Дата добавления - 29.03.2016 в 17:38
Bamboo Дата: Вторник, 29.03.2016, 18:03 | Сообщение № 13
Группа: Пользователи
Ранг: Участник
Сообщений: 56
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Udik, Попробовал первый способ - получилось. Спасибо!

Как передать адрес для второго способа?
 
Ответить
СообщениеUdik, Попробовал первый способ - получилось. Спасибо!

Как передать адрес для второго способа?

Автор - Bamboo
Дата добавления - 29.03.2016 в 18:03
Udik Дата: Вторник, 29.03.2016, 18:28 | Сообщение № 14
Группа: Друзья
Ранг: Старожил
Сообщений: 1291
Репутация: 161 ±
Замечаний: 0% ±

Excel 2013
Как передать адрес

Ну либо через глобальную переменную, либо через аргумент функции (т.е. на время отладки добавляем аргумент, а потом убираем. Через глобальную переменную попроще :) )


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщение
Как передать адрес

Ну либо через глобальную переменную, либо через аргумент функции (т.е. на время отладки добавляем аргумент, а потом убираем. Через глобальную переменную попроще :) )

Автор - Udik
Дата добавления - 29.03.2016 в 18:28
Bamboo Дата: Вторник, 29.03.2016, 18:46 | Сообщение № 15
Группа: Пользователи
Ранг: Участник
Сообщений: 56
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Udik, Спасибо! Подскажите еще как извлечь значение из ячейки относительно адреса ThisCell?


Сообщение отредактировал Bamboo - Вторник, 29.03.2016, 18:53
 
Ответить
СообщениеUdik, Спасибо! Подскажите еще как извлечь значение из ячейки относительно адреса ThisCell?

Автор - Bamboo
Дата добавления - 29.03.2016 в 18:46
Udik Дата: Вторник, 29.03.2016, 19:20 | Сообщение № 16
Группа: Друзья
Ранг: Старожил
Сообщений: 1291
Репутация: 161 ±
Замечаний: 0% ±

Excel 2013
относительно адреса ThisCell

Если правильно вопрос понял
[vba]
Код
i = Application.ThisCell.Offset(1, 1).Value
[/vba]

собственно смещение это аргументы Offset, на сколько строк и на сколько столбцов.


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщение
относительно адреса ThisCell

Если правильно вопрос понял
[vba]
Код
i = Application.ThisCell.Offset(1, 1).Value
[/vba]

собственно смещение это аргументы Offset, на сколько строк и на сколько столбцов.

Автор - Udik
Дата добавления - 29.03.2016 в 19:20
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Передать в пользовательскую функцию, адрес где она находится (Функции/Function)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!