Страницы: 1
RSS
Аргумент функции из текста ячейки, Получить аргумент функции из текста ячейки
 
Привет!
Я хотел бы попросить помощи!
Есть ли в VBA какая ни будь отдельная команда, которая позволяла бы получить значение аргумента текста ячейки.
Эту задачу можно решить через Application.ThisCell.Formula. И мне удалось это сделать. Но это не совсем надежный способ. Так как при нем приходиться буквально выдергивать из текста ячейки часть нужного аргумента. Расчленять содержание текста ячейки. И оно работает если в ячейке не сложная формуле. А когда формула состоит из нескольких функций то, коды работы с текстом ... на пример метод Mid(text, n1,n2) выдает не то, что нужно.
Поэтому слишком много всего написал, что бы из ячейки вытащить текст нужного аргумента, но нужно что бы на все случая работало.
Иными словами. если ли в VBA, что ни будь на подобии: Application.ThisCell.Formula? Но что бы команда выдавала бы не весь текст в ячейке. Где могут быть очень сложные формулы, а просто текст аргумента указанной функции из ячейки.
Код
Fun(arg1,arg2,arg3,arg4,arg5,arg6,arg7,)
Fun = arg4 'Нужно получить не текст значения по указанному адресу, а текст arg4 из самой ячейки _
и это при том, что если TypeName(arg4) = "Range". Даже в таком случае. 
End Function
Буду признателен за помощь!
Изменено: Gigi_Spoke - 27.11.2016 17:47:15
 
Нет встроенного иструмента - только парсинг, только хардкор!
There is no knowledge that is not power
 
Да! ну конечно!
Я так и думал.... сколько уже кодов написал.. аж 10 функций парсинга, на разные случая содержимого в ячейке .. просто замучился. Думаю все предусмотрел.. но все равно не для любого случая работает.
А вся проблема в том, что на пример: arg4.address(external:=True) когда книга открыта нормально работает .И в таком случае тип аргумента TypeName(arg4) = "Range". Но как только книга связи закрывается то, arg4  уже как arg4.address не работает. И поэтому с ним  уже надо работать как с  TypeName(arg4) = "String". Вот в чем проблема ...
Просто нужно, что бы функция выдавала полный адрес ячейки и при закрытой и при открытой книге. И так на все случая содержимого в ячейке. Даже если ячейка содержит много разных функций и с очень длинной формулой. Вот в чем цель всех этих моих не веселых танцев с бубном.
Ладно! Думаю в решении проблемы встроенной фишки на самом деле и нет.
Но если у кого есть соображения как решить проблему. то буду признателен!
 
Цитата
Gigi_Spoke написал:
нужно, что бы функция выдавала полный адрес ячейки и при закрытой и при открытой книге. И так на все случая содержимого в ячейке... Вот в чем цель всех этих моих не веселых танцев с бубном
Допустим, это ЦЕЛЬ. А в чем СМЫСЛ? Объясните, зачем это нужно - может быть, найдется менее экзотический способ решить задачу.
Может помочь NavigateArrow (поищите по форуму) и LinkSources(xlexcellinks) .
 
Ладно! Поищу!
Смысл иметь полный адрес любой области из любой книги в ячейке есть. По крайней мере мне так понимается.
Дело в том, что для дело нужно, что бы пользовательские формулы в книге ссылались не на область как обычно, а на область по значению области.
Это облегчает контроль над адресами ссылок.
И когда пишешь разные приложения, нужные адреса для работы ПО размещаешь на скрытом листе параметров.
Просто так удобнее для контроля и наглядности.
Ведь когда работаешь над приложением, часто надо указывать адрес книги, адрес, листа, адрес области.
Гораздо удобнее, когда все это имеется на скрытом от пользователя листе. На которую и ссылается UserForm
Но на счет NavigateArrow поинтересуюсь.
Если че, буду еще просить помощи! И опять буду признателен!
Гуууу! Как я просто замучился с этим. Никак не могу сделать так как устраивает.
Изменено: Gigi_Spoke - 28.11.2016 01:12:51
 
Я бы предложил создать имена для для диапазонов на листе параметров, и использовать в формулах эти имена.
 
Согласен! Можно и так. Но вообще идеальная среда разработки когда для одной цели есть несколько вариантов решения. И когда самому программеру решать какой предпочтительнее и удобнее. Но в том и все дело, что указанный вариант это чуть ли не единственное решение. Я конечно не хочу ругать VBA, потому, что очень грамотные люди его создали, но то, что я уже просто замучился и никак не могу найти решение, это говорит о том, что кое где в самом языке не доработка.
А так можно именовать области и UserForm связать с ними, но не знаю... лично мне удобнее было бы написать функцию, которая выдавала бы адрес любой области и отображала бы не только адрес внутренней, но и внешней связи. Это упрощало адресацию или пере адресацию и создание алгоритмов и т.д.... по крайней мере на мой взгляд. Но где такая лафа ...
А так, получается, что нужная мне функция может работать без сбоев только для внутренних связей, а для внешних щыщ.
Но ладно, не буду ныть, а вместо этого действительно попробую как посоветовали ....через NavigateArrow ... правда не знаком с этой фишкой... так, что поинтересуюсь.
Но если не получиться то, придется смириться с этим :) и довольствоваться только внутренними адресами связей. Или UserForm переориентировать на имена областей.
Но в любом случае спасибо за отклик!
Если еще будут соображения буду признателен!
Страницы: 1
Читают тему
Наверх