Здравствуйте уважаемые форумчане! охххх... как было не охота выходить на форум ... спрашивать ... болтать ... ждать ответа .. тем более из-за какой то ерунды .... гууу.. вместо того что бы делом заниматься. Был рад, что давно не выходил, но к сожалению приходиться. И самое смешное ради ерунды какой то. Ладно! Извините за эмоции. Так вот, вопрос в чем? Допустим есть вот такой текст формулы в ячейке:
Код
01.12.2017 0:00:00
Понятное дело, что это тип даты... на которые есть разные форматы.
Мне нужно элементарное ... поместить это в кавычки... вот так:
Код
="01.12.2017 0:00:00"
О Боже .. эта ерунда ... целая ПРОБЛЕМА!!!! Когда пишу команды:
А в ответ вот что получаю. А нужно просто значение: 01.12.2017 0:00:00 наконец просто поместить в КАВЫЧКИ!!!! Без этого всего гемма ... касательно формата .... дата не дата.... и прочего ту..зма! Ладно ... опять порывы ... приношу извинения.
У меня одна проблема, и думаю не только я с ней сталкивался. Дело в том, что когда книга эксель без макроса, тогда все работает без сбоев. Но как только в книгу закладываются приложения. возникает одна гнусная и мерзкая пакость. А именно при сохранении такой книги, всплывает сообщение от фирмы Майкрософт об ошибке, с извинениями. И приложение и вовсе вылетает. При чем если приложения находятся в надстройке, что сам же проверял, то в таком случае все работает без сбоев. Сбой возникает, когда макросы в самом файле формата: "*.xlsm". Я понимаю, что все это претензии к производителю, но никто не знает, способ как обойти эту ошибку? И сделать так, что бы файл данного формата не вылетал. А то, просто сильно не охота звонить Билу Гейтсу Поэтому прошу вас о помощи.
Привет! Я хотел бы попросить помощи! Есть ли в 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
Спасибо за отклик на сообщение #24 и за код Вообще я предположительно понимал, что для поставленной цели нужен цыкл, который выглядел так:
Код
Function ValueFullRange(Ячейка)
strЯчейкаОт = Ячейка.Address(external:=True)
Do
Count = Count + 1
strCelladdr = Range(strЯчейкаОт).Offset(Count, 0).Address(external:=True)
If Range(strCelladdr).Value = "" Or Range(strCelladdr).Value = 0 Then
Set setПоследнееВстолбце = Range(strCelladdr).Offset(-1, 0)
Exit Do
End If
Loop
ValueFullRange = strЯчейкаОт & ":" & setПоследнееВстолбце.Address
End Function
Я с него и начал. Поэтому, не сильно утруждая вроде решил вопрос. Но как справедливо было вами сказано для большого диапазона во первых будет работать медленно, во вторых требует обновления. А для последнего если поставить валидейт то, это скорее всего отразится на все остальное. И опять возникнет общее замедление. Поэтому хотел решить задачу через End(xlDown), что бы сэкономить память загрузок. Но видимо для моей пусть даже простой цели отдельной команды в языке VBA просто нет. Поэтому тут без цыкла не обойтись. Ну и ладно! Тогда вопрос в чем? Можно ли сделать, так что бы на пример работающая функция ValueFullRange(Ячейка) или какая ни будь другая (не важно) делала то, что делает указанная функция только экономнее для памяти и быстрее для больших областей. Вот и весь вопрос. За ответ буду признателен!
Уважаемые форумчане! Не хотел вообще регаться на форуме. И задавать вопрос и болтовней заниматься и тратить на это и свое время и время других. Ужас как не хотел, но к сожалению вынужден. Проблема в том, что ну никак не могу найти эту долблённую VBA команду, которая просто не меняла бы последнее значение написанной функции. Всего лишь да и только! Все перерыл .... форумы, сайты замучился .... и никак. А задача то простая. Ну пустяк! И прикол в том, что ответ на даже такую ерунду оказывается еще нужно столько рыть рыть искать! И главное нигде об этом не пишут.
Речь о написании пользовательской функция, которая выдаивает адрес связи. Казалось бы пустяк, но все работает пока книга открыта. А если книга связи закрыта то, формула при обновлении выдает ошибку. Так же как и во встроенной функции на пример вот этой:
Код
=ЯЧЕЙКА("адрес";[Книга1]Лист1!$E$3)
НУЖНО ЧТО БЫ ПРИ ЗАКРЫТОЙ КНИГЕ, ИЛИ ВООБЩЕ ПРИ ОШИБКЕ ФУНКЦИЯ ОСТАВЛЯЛА ПОСЛЕДНЕЕ ЗНАЧЕНИЕ. ВМЕСТО ТОГО ЧТО БЫ ВЫДАВАТЬ ОШИБКУ.
Т.е. работала так же как обычная внешняя связь при закрытой книге. Вот и все что нужно. Вписал код Application.DisplayAlerts = 0 не сработало при Exit Function естественно не выдает ошибку но пишет ноль. Поэтому пришлось аж извращением заниматься. И при закрытой книге брать значение адреса ссылки из самого текста формулы функцииИ вроде получилось, но так меня не устраивает. Нужен другой путь. Более простой о котором говорил. Что бы просто значение при закрытой книге не менялось. Пробовал сделать через Application.Caller.value. И грубо вклинить эту фишку, но естественно возникает циклическая ссылка. Вообщем ДУРДОМ!
Помогите прошу! И извините за эмоциональность. Просто достало! Возиться и топтаться на одном месте из-за такого пустяка. Вот код функции. На всякий пожарный!
Код
Function Linkfulladdress(ТекстСвязи)
On Error Resume Next
strConnection = ТекстСвязи.Address(external:=True)
If InStr(Application.Caller.Formula, "\") > 0 Then
'ЕСЛИ КНИГА СВЯЗИ ЗАКРЫТА ТО ФУНКЦИЯ _
ОТОБРАЖАЕТ СВЯЗЬ ИЗ ТЕКСТА ЕЕ ФОРМУЛЫ!
strConnection = FuncLoc_strFormulaWithCloseBookLink(Application.Caller.Formula)
End If
Linkfulladdress= strConnection
End Function
Function FuncLoc_strFormulaWithCloseBookLink(Текст) As String
strТекст = Текст
strSymb = "["
numFormulaText_Len = Len(strТекст)
strOutofEndSymb = Left(strТекст, numFormulaText_Len - 1)
strLeftText = "'" & Right(strOutofEndSymb, numFormulaText_Len - InStrRev(strOutofEndSymb, strSymb))
'=======================
If InStr(strLeftText, ";") = 0 Then
ConnectionText = strLeftText
ElseIf InStr(strLeftText, ";") > 0 Then
ConnectionText = Left(strLeftText, InStr(strLeftText, ";") - 1)
ElseIf InStr(strLeftText, ",") > 0 Then
ConnectionText = Left(strLeftText, InStr(strLeftText, ",") - 1)
End If
FuncLoc_strFormulaWithCloseBookLink = ConnectionText
'=======================
End Function