Страницы: 1
RSS
Как активировать ячейку с формулой =ГИПЕРССЫЛКА через VBA?
 
Здравствуйте
Столкнулся со следующей проблемой: http://planetaexcel.ru/techniques/13/82/ по этой инструкции составил в ячейке формулу для автоматической генерации письма. Но как теперь запустить эту формулу через VBA? Кликаю мышкой в ячейку - окно письма успешно открывается, все данные в нем подставляются в нужные поля верно. Как открыть письмо именно макросом?
Заранее благодарен.
 
dxn, если предполагается использование гиперссылки макросом, создайте ее не с помощью формулы, а с помощью Ctrl+K. Запишите макрорекордером это действие, чтобы увидеть, как можно создать гиперссылку программно.
А активировать такую гиперссылку очень просто:
Код
1
range("D4").Hyperlinks(1).Follow
 
Казанский, да, так работало изначально, но не получалось вставить в гиперссылку текст письма. Увидел, что текст письма можно задать через формулу, сделал формулой, но не могу активировать ячейку. Можно ли через Ctrl+K задать текст письма?
 
Нашел тему с аналогичной проблемой: http://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=1&TID=47537
Там предлагается следующее решение: http://excelvba.ru/code/FormulaHyperlinks#comment-1083
Но в моем случае оно не срабатывает, выдается следующая ошибка: http://prntscr.com/ahr99c
Ниже пример моей формулы:
=ГИПЕРССЫЛКА("mailto:pochta@mail.ru?subject=Заказ&body=Здравствуйте%0A%0A%0AПримите, пожалуйста, заказ:%0A"&B9&" "&C9&"  "&D9;"отправить")
Можно ли как-то это обойти?
Необходимо, чтоб при запуске макроса открывалось окно для написания письма, в котором подставляются получатель, тема и содержание письма из этой формулы. Остается только нажать кнопку "отправить".
 
dxn, а если рассмотреть вариант отправки макросами?
Здесь же по ссылке есть примеры: http://planetaexcel.ru/techniques/3/48/
Изменено: Jungl - 21.03.2016 01:10:36
 
Код
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub ПримерИспользования()
    FollowFormulaHyperlink ActiveCell
End Sub
 
Function FollowFormulaHyperlink(ByRef cell As Range)
    On Error Resume Next
    If cell.HasFormula Then
        If cell.Formula Like "=HYPERLINK*" Then
            HL$ = Evaluate(Mid$(Split(cell.FormulaLocal, ";")(0), 14))
            ThisWorkbook.FollowHyperlink HL$
        End If
    End If
End Function
 
Jungl, в первом варианте ответа вы прикрепили макрос mailto.xlsm
Через него открыть окно письма получается, все данные подставляются верно, но он не совсем универсален, т.к. будем использовать этот макрос и на маках, а там отправка через Explorer не срабатывает, либо я не знаю как. Можно ли обойти это окно при запуске вашего макроса http://prntscr.com/ahtp30 ? Чтоб сразу осуществлялся переход к окну письма, таким образом сократив один клик.
Отправлять целиком книгу или лист вариант не подходит, нужно отправлять только данные из заданных ячеек (артикулы для заказа).

Игорь, это весь код, который необходимо вставить? Что-то при выделении ячейки с формулой и запуске макроса ничего не происходит..
Изменено: dxn - 21.03.2016 01:52:08
 
dxn, по ссылке выше, там есть универсальный макрос из способа 3. Используйте его, в ячейки просто вставляете адреса, пишете текст даже с переходом(никаких доп значений в тексте) и у вас все вставится без лишних кликов(поэтому я удалил свой файл).
Про мак ничего не скажу, не работал на нем.
 
Цитата
это весь код, который необходимо вставить?
да
я вставил вашу формулу на пустой лист, выделил ячейку с формулой, - и макрос работает
 
Игорь, и правда, если смотреть по формуле, которую скидывал - работает отлично. Только немного осложняется тем, что фактически формула состоит из нескольких одинаковых строк, и если уже мы уже применяем формулу к двум и более строкам, то не срабатывает...Решил скинуть только одну строку изначально, чтоб не засорять кодом сообщение, не думал, что критично. Вот, например, формула для 5 строк:
=ГИПЕРССЫЛКА("mailto:pochta@mail.ru?subject=Заказ&body=Здравствуйте%0A%0A%0AПримите, пожалуйста, заказ:%0A"&A13&" "&B13&"  "&C13&"%0A"&ЕСЛИ(A14="";"";A14&" "&B14&"  "&C14&"%0A"&ЕСЛИ(A15="";"";A15&" "&B15&"  "&C15&"%0A"&ЕСЛИ(A16="";"";A16&" "&B16&"  "&C16&"%0A"&ЕСЛИ(A17="";"";A17&" "&B17&"  "&C17))));"отправить")

Jungl, да, на виндоус сработало. На маке, увы, нет. Сейчас попробую поставить аутлук на мак, может получится.
 
Нет, на маке с аутлуком не удается заставить работать...Вариант Игоря вроде как будет идеален, если адаптировать его под несколько строк.
 
> фактически формула состоит из нескольких одинаковых строк

так вот и надо было сразу реальный пример формулы показывать...
мой макрос берет кусок формулы до точки с запятой - потому и не работает, т.к. там у вас есть точка с запятой внутри ЕСЛИ()

замените
Код
1
HL$ = Evaluate(Mid$(Split(cell.FormulaLocal, ";")(0), 14))

на
Код
1
HL$ = Evaluate(Mid$(Split(cell.FormulaLocal, ";""отправить""")(0), 14))

это обрежет формулу корректно
проверить не могу - формулы ваша даёт ошибку
дальше уже сами разбирайтесь
 
Игорь, странно, а у меня формула без ошибок работает.
Исправление макроса не помогло, все равно ничего не происходит при его запуске, хотя при клике по ячейке с гиперссылкой - окно почты открывается, и все в него подставляется.
Решил попробовать избавиться от ЕСЛИ(), таким образом убрав точки с запятой в формуле. Ваш первый вариант работает. Пока остановлюсь на нем. Не очень удобно использовать формулу без ЕСЛИ(), т.к. в письмо добавляются пустые строки, если не все ячейки заполнены, а ЕСЛИ() как раз отсеивал такие пустые строки. Буду рад, если все-таки поможете исправить макрос для учета ЕСЛИ(). Но спасибо и на этом!
 
dxn, вы бы файл с примером залили, так быстрее помогут, чем будут гадать, по какой же причине у вас не происходит действие кода/формулы.
 
Jungl, точно. Прикрепил.
 
Проблему с пустыми строками решил. Вынес в дополнительные ячейки формулы для каждой строки ("%0A"&ЕСЛИ(A14="";"";A14&" "&B14&" "&C14) соединил через СЦЕПИТЬ() и скрыл ЕСЛИ(A14="";"";...)
И в ГИПЕРССЫЛКА() добавил эти дополнительные ячейки через СЦЕПИТЬ(), таким образом убрав ЕСЛИ() из формулы гиперссылки, чтобы работал первый вариант макроса.
Спасибо за помощь.
 
dxn, пробуйте поэкспериментировать со вложенным файлом, может вам будет то что нужно на маке и без формул на листе.
Делал для себя, дабы потренироваться.
 
Jungl, вроде бы все супер. Даже решена проблема, с которой столкнулся при использовании формулы ГИПЕРССЫЛКА() - как я понял, максимум 255 символов можно использовать в формуле, иначе ломается. Пришлось письмо резать на 2 части, чтоб все умещалось. В вашем варианте этой проблемы нет вроде как. Сейчас еще потестирую...
 
Jungl, да, все отлично работает! В итоге останусь на вашем решении. Большое спасибо за помощь!
 
Я просто оставлю это здесь. Попробовал поработать с циклами, вот что получилось. Думаю не только автору темы пригодится.
Работает след образом, выделяете те ячейки, которые хотите добавить в тело письма и жмете кнопку.
 
Jungl, в идеале добавить сюда возможность отправки только не пустых ячеек в выделенном диапазоне. То есть, задаем диапазон, например А1:С10, а заполнены у нас только первые 4 строки, и при запуске макроса текущий вариант скопирует все 10 строк, таким образом образуется пустое место в письме, которое хорошо бы убрать.

В предыдущем варианте ваш макрос вставлял в письмо содержимое только из одной указанной ячейки. Я добавил для каждой строки формулу, в которой значения этой строки сцеплялись в одно (D1=A1&B1&C1). И в конечной ячейке, которая вставляется в письмо, прописал формулу, которая проверяет не пустые ли эти сцепленные ячейки D1&ЕСЛИ(D2="";"";D2)&ЕСЛИ(D3="";"";D3)&... Таким образом отсек пустое место в письме.
Страницы: 1
Читают тему
Наверх
Loading...