Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Поместить текст даты в формулу
 
Sanja, СПАСИБО!
ОГРОМНОЕ! ))))))))))  :)  :)
Гууууу ... )))
Коротко и ясно ... без лишних слов.
И спасибо за понимание почему, иногда так негодуешь ...  :)  :)
Код
Sub qqq()Dim dDate As Date, sDate As String, MyText As String
    dDate = "01.12.2017  0:00:00"
    MyText = "Несчастный текст даты"
    sDate = Format(dDate, "dd.mm.yyyy h:mm:ss")
    MsgBox sDate & " " & MyText
End Sub
Понятно ...понятно

Всем остальным тоже еще раз спасибо

 
Изменено: Gigi_Spoke - 08.10.2017 21:29:43
Поместить текст даты в формулу
 
Здравствуйте уважаемые форумчане!
охххх... как было не охота выходить на форум ... спрашивать ... болтать ... ждать ответа .. тем более из-за какой то ерунды .... гууу.. вместо того что бы делом заниматься.
Был рад, что давно не выходил, но к сожалению приходиться. И самое смешное ради ерунды какой то.
Ладно! Извините за эмоции.
Так вот, вопрос в чем?
Допустим есть вот такой текст формулы в ячейке:
Код
01.12.2017  0:00:00

Понятное дело, что это тип даты... на которые есть разные форматы.

Мне нужно элементарное ... поместить это в кавычки... вот так:

Код
="01.12.2017  0:00:00"

О Боже .. эта ерунда ... целая ПРОБЛЕМА!!!!
Когда пишу команды:
Код
'-------------------------------------------------
Текст1 = "=""" & ActiveCell.Value & """"
Текст2 = "=""" & ActiveCell.Text & """"
Текст3 = "=""" & ActiveCell.Formula & """"
Текст4 = "=""" & Application.Text(ActiveCell.Text, "ДД.ММ.ГГГГ  ч:мм:сс") & """"
'-------------------------------------------------
MsgBox _
Текст1 & Chr(10) & _
Текст2 & Chr(10) & _
Текст3 & Chr(10) & _
Текст4
'-------------------------------------------------
'Текст1  - выдает: ="01.12.2017 "
'Текст2 - выдает: ="01.12.2017  0:00"
'Текст3 - а тут вообще сдурел .. выдает: ="43070"  ... дебилизм
'Текст4 - выдает: ="01.12.2017  0:00"
'-------------------------------------------------

А в ответ вот что получаю.
А нужно просто значение: 01.12.2017  0:00:00  наконец просто поместить в КАВЫЧКИ!!!!
Без этого всего гемма ... касательно формата .... дата не дата.... и прочего ту..зма!
Ладно ... опять порывы ... приношу извинения.

Буду признателен за отклик и помощь!
Изменено: Gigi_Spoke - 08.10.2017 21:28:46
Эксель с макросом при сохранении дает сбой
 
Кое что еще хотел спросить!
И у меня два вопроса.
вопрос первый.
Я скачал исправления: *_intl_i386_zip.exe
Но в полученном на почту письме говориться:

".....
Мы понимаем, что очень сложно определить, связаны ли какие-либо проблемы с совместимостью или ошибки при установке с данным исправлением. Если вы хотите получить подтверждение, что данное исправление предназначено для устранения именно возникшей у вас проблемы, либо вы считаете, что из-за данного исправления у вас возникли проблемы с совместимостью или ошибки при установке, свяжитесь со специалистами службы поддержки, и они вам помогут.
........
Не разворачивайте исправление в рабочей среде, предварительно не проверив его работу.
Перед установкой выполните резервное копирование системы или компьютера, где будет устанавливаться исправление........"

Да ну! Целое дело!
А я то думал, просто залить, исправление которое исправит все ошибки, которые были зарегистрированы производителем. Не вдаваясь в детали... А тут подтверждение, что данное исправление предназначено .... и дальше ..и еще резервную копию системы .... короче..... цело дело.
Поэтому не решаюсь устанавливать, что бы еще больше не навредить. И следовательно хотел спросить: Можно ли рискнуть?
Это первое!
Второе!
Если рисковать не стоит то, стоит ли писать в службу поддержки?
Ведь речь не о лицензионном продукте... и вообще это для частного потребителя, не для юр.. лица.
Просто помню случай, когда на компе была не лицензионная версия, и галочка стояла на получать обновления.
После этого постоянно всплывала и надоедала сообщение, что система не лицензионная.  

Опять буду признателен!
Изменено: Gigi_Spoke - 21.03.2017 12:19:15
Эксель с макросом при сохранении дает сбой
 
Благодарен!
Уже вижу, что проблема понята. И поэтому, советы в уместном для проблематики русле.
Ладно! Залью!
Блин! Если это сработает, и сбой будет устранен то, аж рад буду  :) :)  .
Так что, попробую.
Но если че, буду опять просить помощи и совета.
Хотя надеюсь, что не понадобиться и что есть, лекарство.
Еще раз спасибо!
Эксель с макросом при сохранении дает сбой
 
Цитата
Sanja написал:
Версия Excel? И разрядность. И файл-пример
Версия Эксель  2007 г.

Проц 32-х разрядный. А сам эксель тоже для 32.

Насколько помню, если не ошибаюсь, 64 разрядная версия на 32 разрядную систему и не установиться.

Так что, с этим все нормально.

Что касается файла примера, дело в том, что файлов много. Есть с большим вложением макросов, есть с меньшим. Но толку с того, если прикреплю файл пример?

Дело в том, что эксель при любом файле с макросами вылетает.

Правда происходит это не всегда при сохранении. Только иногда. Ну, примерно в час один раз.

Но когда происходит, без мата не обхожусь. Потому, что так она достала уже … эта мерзо-пакость. В особенности, когда сижу уткнувшись в монитор и все внимание на алгоритмы, и отладку кода. И в этом самое время вдруг внезапно бац … и выходит сообщение о сбое работы Эксель.

И главное так не только на одном компьютере, но и на всех остальных. Аж в пяти местах проверял. И в win’7/8 и даже в winXP. ВЕЗДЕ так делает зараза. И никак не угомониться.

Цитата
Игорь написал: Тут либо проблема в макросах, либо проблема из-за сбоя в файле Excel

Так что, сам файл навряд ли имеет кряк. Потому, что все файлы, которые заново создавались, в которых макросы писались с нуля, ведь не могут быть битыми.

И при этом, что касается того, если сами  макросы вызывают вылет Excel…. Тоже не думаю, что так.

Потому, что и тут, файлов много… и при работе с любым из них, Эксель всегда выкидывает такие номера.

И при этом, дело в том, что я те же самые макросы перенес в файл надстройки. С тем же самым кодом. Сам код макросов и в файле *.XLAM был тот же что в *.xlsm. Но почему то, в работе с первым ни один раз не было такой кляузы, а со вторым иногда даже каждый пол часа.

Так что, ну просто понять не могу в чем причина… и главное это чаще происходит, когда редактор VBA разработчик открыт.

Может быть, дело в подключенных библиотеках, которые стали не по вкусу, Excel-ю 2007?

Но и тут могу сказать, что в этом не сильно большой прихотливостью отличался. И в опции: References не тонную величину библиотек подключил. А всего каких то два или три дополнительных.

Вот все библиотеки которые подключены:

Visual Basic for Application

Microsoft Excel 12.0 Object Library

Microsoft Office 12.0 Object Library

Microsoft Forms 2.0 Object Library

Microsoft ActiveX Data Object 2.8 Library

Вот и все подключенные библиотеки.

Так что, я просто понять не могу, причину.

Мало того, что когда занимаешься отладкой макроса, столько проблем возникает, и работаешь над  устранением ошибок в коде приложения. И с трудом, но в итоги добиваешься корректной работой кода. И это вроде бы удается. И думаешь, ну все ….  теперь все работает нормально. И сложные алгоритмы корректно составлены, и  переменные нигде не конфликтуют. И наконец вздыхаешь с облегчением. И тут на тебе…. Что уже навряд ли ошибки того, что ты написал, а скорее думаю недоработки самой среды разработки. И самого производителя. И думаешь, как раз еще этого не хватало. Что бы, еще отвечать, не только за свои приложения, но еще и за среду.

Так что, опять рассчитываю на помощь!

И опять буду признателен за ответ!

Изменено: Gigi_Spoke - 18.03.2017 00:45:32
Эксель с макросом при сохранении дает сбой
 
Уважаемые форумчане.

У меня одна проблема, и думаю не только я с ней сталкивался.
Дело в том, что когда книга эксель без макроса, тогда все работает без сбоев. Но как только в книгу закладываются приложения. возникает одна гнусная и мерзкая пакость.  А именно при сохранении такой книги, всплывает сообщение от фирмы Майкрософт об ошибке, с извинениями.
И приложение и вовсе вылетает. При чем если приложения находятся в надстройке, что сам же проверял, то в таком случае все работает без сбоев.
Сбой возникает, когда макросы в самом файле формата: "*.xlsm".
Я понимаю, что все это претензии к производителю, но никто не знает, способ как обойти эту ошибку? И сделать так, что бы файл данного формата не вылетал.
А то, просто сильно не охота звонить Билу Гейтсу   :)  :) :) :)
Поэтому прошу вас о помощи.

Буду признателен за совет и помощь!
Изменено: Gigi_Spoke - 15.03.2017 22:07:45
Аргумент функции из текста ячейки, Получить аргумент функции из текста ячейки
 
Согласен! Можно и так. Но вообще идеальная среда разработки когда для одной цели есть несколько вариантов решения. И когда самому программеру решать какой предпочтительнее и удобнее. Но в том и все дело, что указанный вариант это чуть ли не единственное решение. Я конечно не хочу ругать VBA, потому, что очень грамотные люди его создали, но то, что я уже просто замучился и никак не могу найти решение, это говорит о том, что кое где в самом языке не доработка.
А так можно именовать области и UserForm связать с ними, но не знаю... лично мне удобнее было бы написать функцию, которая выдавала бы адрес любой области и отображала бы не только адрес внутренней, но и внешней связи. Это упрощало адресацию или пере адресацию и создание алгоритмов и т.д.... по крайней мере на мой взгляд. Но где такая лафа ...
А так, получается, что нужная мне функция может работать без сбоев только для внутренних связей, а для внешних щыщ.
Но ладно, не буду ныть, а вместо этого действительно попробую как посоветовали ....через NavigateArrow ... правда не знаком с этой фишкой... так, что поинтересуюсь.
Но если не получиться то, придется смириться с этим :) и довольствоваться только внутренними адресами связей. Или UserForm переориентировать на имена областей.
Но в любом случае спасибо за отклик!
Если еще будут соображения буду признателен!
Аргумент функции из текста ячейки, Получить аргумент функции из текста ячейки
 
Ладно! Поищу!
Смысл иметь полный адрес любой области из любой книги в ячейке есть. По крайней мере мне так понимается.
Дело в том, что для дело нужно, что бы пользовательские формулы в книге ссылались не на область как обычно, а на область по значению области.
Это облегчает контроль над адресами ссылок.
И когда пишешь разные приложения, нужные адреса для работы ПО размещаешь на скрытом листе параметров.
Просто так удобнее для контроля и наглядности.
Ведь когда работаешь над приложением, часто надо указывать адрес книги, адрес, листа, адрес области.
Гораздо удобнее, когда все это имеется на скрытом от пользователя листе. На которую и ссылается UserForm
Но на счет NavigateArrow поинтересуюсь.
Если че, буду еще просить помощи! И опять буду признателен!
Гуууу! Как я просто замучился с этим. Никак не могу сделать так как устраивает.
Изменено: Gigi_Spoke - 28.11.2016 01:12:51
Аргумент функции из текста ячейки, Получить аргумент функции из текста ячейки
 
Да! ну конечно!
Я так и думал.... сколько уже кодов написал.. аж 10 функций парсинга, на разные случая содержимого в ячейке .. просто замучился. Думаю все предусмотрел.. но все равно не для любого случая работает.
А вся проблема в том, что на пример: arg4.address(external:=True) когда книга открыта нормально работает .И в таком случае тип аргумента TypeName(arg4) = "Range". Но как только книга связи закрывается то, arg4  уже как arg4.address не работает. И поэтому с ним  уже надо работать как с  TypeName(arg4) = "String". Вот в чем проблема ...
Просто нужно, что бы функция выдавала полный адрес ячейки и при закрытой и при открытой книге. И так на все случая содержимого в ячейке. Даже если ячейка содержит много разных функций и с очень длинной формулой. Вот в чем цель всех этих моих не веселых танцев с бубном.
Ладно! Думаю в решении проблемы встроенной фишки на самом деле и нет.
Но если у кого есть соображения как решить проблему. то буду признателен!
Аргумент функции из текста ячейки, Получить аргумент функции из текста ячейки
 
Привет!
Я хотел бы попросить помощи!
Есть ли в 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
Определение области ячеек со значениями, Написать оптимальный код для определения ячеек со значениями
 
Вот еще другой вариант!
Изменено: Gigi_Spoke - 20.10.2016 15:06:03
Определение области ячеек со значениями, Написать оптимальный код для определения ячеек со значениями
 
Вот пример!
Там все указано,что и как
Определение области ячеек со значениями, Написать оптимальный код для определения ячеек со значениями
 
Варианты в сообщениях #2 и #3 не подходят!
Ведь Range.End рассчитан на значения и формулы в ячейках. А нужна только область БЕЗ ПУСТЫХ ИЛИ НУЛЕВЫХ значений. При этом НЕ ВАЖНО такие ячейки с формулами или без!
Вот что нужно!
Буду признателен если кто поможет!
Изменено: Gigi_Spoke - 20.10.2016 12:36:58
Определение области ячеек со значениями, Написать оптимальный код для определения ячеек со значениями
 
Спасибо за отклик на сообщение #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 функции, Как сделать так что бы VBA функция не меняла свое последнее значение
 
Опять привет!
Меня интересует еще вопрос!
Вот такая вот обычная команда:
Код
strRg = "A1"
ActiveSheet.Range(strRg, ActiveSheet.Range(strRg).End(xlDown)).Select
Дело в том, что код выделяет заполненный данными диапазон ячеек в столбце. Вроде нормально, но к сожалению команда End(xlDown) выделает поля в которых и формулы и значения. А мне нужно, что бы код реагировал только на ЗНАЧЕНИЯ. И НЕ ВЫДЕЛЯЛ ФОРМУЛЫ С ПУСТЫМ ИЛИ НУЛЕВЫМ ЗНАЧЕНИЕМ.
Как это сделать?
Буду очень признателен за помощь.
Возврат последнего значения VBA функции, Как сделать так что бы VBA функция не меняла свое последнее значение
 
Спасибо за файлы. В особенности спасибо за эту часть:
Код
If i < 4 Then i = 4
F = "=" & IIf(InStr(s, "'"), "'", "") & Mid(s, i, Len(s) - i)
Вообще у меня есть еще другие вопросы. Которые чуть сложнее решить чем данный. Попытаюсь решить самостоятельно. но если не получиться то, опять попрошу Удачи всем.
Изменено: Gigi_Spoke - 18.10.2016 13:20:05
Возврат последнего значения VBA функции, Как сделать так что бы VBA функция не меняла свое последнее значение
 
Я пробовал вставить
Код
Application.Volatile = false

Функция все равно обновляется при calc.
Завтра посмотрю окаченный вариант.
Еще раз спасибо!
Возврат последнего значения VBA функции, Как сделать так что бы VBA функция не меняла свое последнее значение
 
Спасибо за файл! Посмотрю.
Возврат последнего значения VBA функции, Как сделать так что бы VBA функция не меняла свое последнее значение
 
Нужно что бы функция ВСЕГДА возвращала "='[Wb.xlsx]Sheet1'!$A$1"
Вне зависимости от того сколько раз книгу: WB открыли и закрыли. При этом мне значение адреса не нужно, только адрес в таком формате: "='[Wb.xlsx]Sheet1'!$A$1"

Существует ли команда, которая вообще не обновляет значение функции при обновлении формулы?


 
Изменено: Gigi_Spoke - 18.10.2016 13:23:00
Возврат последнего значения VBA функции, Как сделать так что бы VBA функция не меняла свое последнее значение
 
Опять привет!
Во первых спасибо за ответы!
Во вторых за эмоции конечно пардон!
Просто топчусь на месте и никак не могу решить вопрос.
Ладно! Думаю эмоции тут и на самом деле не к чему!
Так что еще раз пардон.
Перехожу к теме.
И на конкретнем примере.
Ниже работающая функция.
Просто предыдущий вариант функции ссылался на другую функцию.
Поэтому я в прежний вариант вставил из полученного кода функции эту часть: strConnection = IIf(InStr(s, "'"), "'", "") & Mid(s, i + 1, Len(s) - i - 1)
Что бы было все в одном. И вот собственно вся нужная работающая малая функция.
Все работает! Вопрос в другом.
Просто можно ли обойтись без Application.ThisCell.Formula.
В самой функции в коменнтариях уточнил что нужно вместо: Application.ThisCell.Formula.
----------------------
На свой вопрос я уже получил ответ, о том, что это не получиться. И думаю скорее так и есть.
но мало ли ... может есть идея как обойтись без Application.ThisCell.Formula. и без на пример еще CreateObject("ADODB.Connection")

Вот и все дела!
Код
Function Linkfulladdress(ТекстСвязи)
On Error Resume Next
Dim s As String, i As Long
s = Application.ThisCell.Formula
i = InStrRev(s, "\")
'--------------------------------
If TypeName(ТекстСвязи) = "Range" Then
    strConnection = ТекстСвязи.Address(external:=True)
Else
     If i Then
    'ЕСЛИ КНИГА СВЯЗИ ЗАКРЫТА ТО ФУНКЦИЯ ОТОБРАЖАЕТ АДРЕС СВЯЗИ ИЗ ТЕКСТА ЕЕ ФОРМУЛЫ! _
    'А НУЖНО ЧТО БЫ ПРИ ЗАКРЫТОЙ КНИГЕ ЗНАЧЕНИЕ АДРЕСА СВЯЗИ ФУНКЦИИ ВООБЩЕ НЕ ОБНОВЛЯЛАСЬ! _
    'Т.Е. ОСТАВАЛАСЬ ТАКОЙ ЖЕ КАК ДО ОБНОВЛЕНИЯ. _
    'И РАБОТАЛА ТАК ЖЕ КАК НА ПРИМЕР РАБОТАЕТ функция: ВПР ПРИ ЗАКРЫТОЙ КНИГЕ
    strConnection = IIf(InStr(s, "'"), "'", "") & Mid(s, i + 1, Len(s) - i - 1) ' Адрес
    End If
End If
Linkfulladdress = strConnection
End Function




P.S.
Функция Linkfulladdress(ТекстСвязи) или  F(X) Не важно. При аргументе: ТекстСвязи или X  
т.е. ссылки на пример на ячейку [Wb.xlsx]Sheet1!$A$1
должна возвращать: [Wb.xlsx]Sheet1!$A$1
И это и при открытой и при закрытой книге.
И все это без участия Application.ThisCell.Formula
ЧТО БЫ ПРОСТО ЗНАЧЕНИЕ ФУНКЦИИ И ВОВСЕ НЕ ОБНОВЛЯЛОСЬ ПРИ ЗАКРЫТОЙ КНИГЕ!
Изменено: Gigi_Spoke - 17.10.2016 22:51:34
Возврат последнего значения VBA функции, Как сделать так что бы VBA функция не меняла свое последнее значение
 
Ладно! понял!
Так и знал.
Хотя понял не до конца!
Ведь обычная ссылка тоже ссылается на закрытую книгу, но не меняет значение. И это не из РЕАЛЬНОГО АДРЕСА!.
И она ведь все таки выдает значение даже при этом?  
А нельзя ли сделать так, что при ошибке адрес превращался в текстовое значение?
.......
Хотя ладно!  Не буду дальше! Вижу что нет решения.
Короче понял!  
Изменено: Gigi_Spoke - 19.10.2016 23:37:34
Возврат последнего значения VBA функции, Как сделать так что бы VBA функция не меняла свое последнее значение
 
Цель в том, что бы функция работала как обычная ссылка. КОТОРАЯ ПРИ ЗАКРЫТОЙ КНИГЕ НЕ  МЕНЯЕТ ЗНАЧЕНИЕ! Но выдавала не значение адреса, а полный адрес адреса. И это даже если книга зарыта. Что бы просто значение функции не менялось при ошибке. Так же как в обычной ссылке на другую книгу, когда последняя закрыта!
Я просто в VBA с не большим стажем и поэтому хотел спросить возможно ли так вообще?
Буду признателен если кто нибудь подскажет возможно ли это. И если да, то как.
Изменено: Gigi_Spoke - 17.10.2016 17:46:12
Возврат последнего значения VBA функции, Как сделать так что бы VBA функция не меняла свое последнее значение
 
Да не обижаюсь я! просто достало.
Поэтому не знаю кого в чем провоцирую,но в варианте опять не то, о чем говорил!
Это если на этот раз без "нытья", а по СУТИ!!1 :)
Просто НУЖНО ЧТО БЫ ПРИ ОШИБКЕ ФОРМУЛА ПРОСТО НЕ МЕНЯЛА ЗНАЧЕНИЕ.
Что бы не было необходимости текст ссылки из самой ячейки выдергивать.
Вот и все дела!
Еще раз извините, если опять нытье!  :)
Буду признателен за помощь!
Возврат последнего значения VBA функции, Как сделать так что бы VBA функция не меняла свое последнее значение
 
Уважаемые форумчане!
Не хотел вообще регаться на форуме. И задавать вопрос и болтовней заниматься и тратить на это и свое время и время других. Ужас как не хотел, но к сожалению вынужден. Проблема в том, что ну никак не могу найти эту долблённую 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
 

Буду признателен за ответ!
Страницы: 1
Наверх