Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/55: Рейтинг темы: голосов - 55, средняя оценка - 4.73
 Аватар для BolgarchukR
0 / 0 / 2
Регистрация: 07.07.2015
Сообщений: 77

Как сделать макрос вставки гиперссылки в текст в ворде?

10.08.2018, 22:10. Показов 10996. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Подскажите пожалуйста, как создать макрос который бы вставлял из буфера обмена гиперссылку в текст.
Я вот попробовал записать горячими клавишами.
1 – вначале (можно вручную) выделяю нужный текст, за которым будет ссылка. Например в ворде выделил эти 4 слова "В любой выделенный текст"
2 – а это уже попробовал записать в макрос
Code
1
2
Ctrl +K
Ctrl+V и Ente
Получился такой макрос
Visual Basic
1
2
3
4
5
6
7
8
9
Sub вставка_гиперссылки()
'
' вставка_гиперссылки Макрос
'
'
    ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
        "https://www.google.com.ua/", SubAddress:="", ScreenTip:="", _
        TextToDisplay:="В любой выделенный текст"
End Sub
Но это совсем не то что мне надо. Он почему-то вставляет только одну и ту же гиперссылку, та что записана в макросе, а не та, что скопирована в данный момент в буфере. И не в выделенный текст, а заменяет выделенный текст на тот что написан в TextToDisplay:=". Но мне не надо что бы он заменял.
Или на худой конец пусть вставляет текст, но хотя бы как сделать что бы он вставлял не ссылку, записанную в макросе, а ссылку с буфера обмена.
Было бы очень удобно. Часто к примеру, нахожу какое-то хорошее видео или статью копирую её в ворд и в её же названии вставляю гиперссылку.
Нашел похожую тему «Word VBA Вставить с буфера обмена» Но не селен в этом и не получается.

Добавлено через 6 минут
п.с. хотел подправить первый пункт поста что бы было понятнее, но срок изменения сообщения уже истек
там в 1
– вначале вручную скопировал с обозревателя ссылку https://www.google.com.ua/ дальше тоже вручную выделяю нужный текст, за которым будет ссылка. Например, в ворде выделил эти 4 слова "В любой выделенный текст"
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.08.2018, 22:10
Ответы с готовыми решениями:

Как узнать какой кнопке привязан макрос в ворде
как изменить текст на зеленый в ворде макрос: Sub Макрос1() ' ' Макрос1 Макрос ' ' Selection.HomeKey Unit:=wdLine ...

Как сделать, чтобы макрос видел текст в документе, а не в самом макросе пришлось бы вводить
Как сделать, чтобы макрос видел текст в документе, а не в самом макросе пришлось бы вводить? Т.е. чтобы я любой текст вводила в документе...

Как за секунду сделать идеально оформленный текст: макрос в Word для тех, кто много пишет
Сделал я макрос, как описано на https://drive.google.com/file/d/1qPpikmaKAP5YnURw0Xmymh-kwbDdqVCk/view?ref=vc.ru , но он у меня выдаёт...

11
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
11.08.2018, 23:20
Кажись должно получиться

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Option Explicit
 
 
Sub вставка_гиперссылки()
'
' вставка_гиперссылки Макрос
'
'
    With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        
        .GetFromClipboard
        If isUrl(.GetText) Then
            ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
                    .GetText, SubAddress:="", ScreenTip:="", _
                    TextToDisplay:="В любой выделенный текст"
        
        Else
            MsgBox "Текст буфера не является url"
        End If
        
 
    End With
    
    
 
End Sub
 
Function isUrl(ByVal url$) As Boolean
    Dim v
    For Each v In Array("ftp://", "http://", "https://")
        If InStr(1, url, v, 1) > 0 Then isUrl = 1: Exit For
    Next
End Function
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
11.08.2018, 23:51
Лучший ответ Сообщение было отмечено BolgarchukR как решение

Решение

Кстати я немного усовершенствовал наш макрос
теперь вставляется и ссылка и заголовок той самой страницы

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Option Explicit
 
 
 
 
Function UrlTitle(ByVal Url$) As String
    'Получение заголовка страницы по указанной ссылки
 
    With CreateObject("InternetExplorer.Application")
        .Navigate Url
        
        While .Busy 'ждем готовность документа
            DoEvents
        Wend
        UrlTitle = .Document.Title
    End With
    
End Function
 
 
 
Sub вставка_гиперссылки()
'
' вставка_гиперссылки Макрос
'
'
    With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        
        .GetFromClipboard
        If isUrl(.GetText) Then
            ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
                    .GetText, SubAddress:="", ScreenTip:="", _
                    TextToDisplay:=UrlTitle(.GetText)
        
        Else
            MsgBox "Текст буфера не является url"
        End If
        
 
    End With
    
    
 
End Sub
 
Function isUrl(ByVal Url$) As Boolean
    Dim v
    For Each v In Array("ftp://", "http://", "https://")
        If InStr(1, Url, v, 1) > 0 Then isUrl = 1: Exit For
    Next
End Function
на рисунке ниже я скопировал url-адрес этой темы и выполнил макрос
Миниатюры
Как сделать макрос вставки гиперссылки в текст в ворде?  
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
12.08.2018, 00:37
В коде нужно было еще дописать Quit
Visual Basic
1
2
        UrlTitle = .Document.Title
        .Quit 'Закрытие InternetExplorer

Не по теме:

Цитата Сообщение от BolgarchukR Посмотреть сообщение
хотел подправить первый пункт поста что бы было понятнее, но срок изменения сообщения уже истек
там в 1
Подправить можно если никто не ответил
если написать чтото а затем нажать правку

0
 Аватар для BolgarchukR
0 / 0 / 2
Регистрация: 07.07.2015
Сообщений: 77
12.08.2018, 13:30  [ТС]
Гениально! Вы предвосхитили мои ожидания. Столько лет мучений… Сколько бы можно было сэкономить времени. Вроде бы скопировать ссылку вручную не долго, но по пол секунды, к тому же если учесть, что копирую по без преуменьшения около 100 раз в день, т.к. часто бывает важно вернуться к той или иной информации с форума или сайта, из записанной в ворде приметки. В общем не знаю, как для других, а для меня это чрезвычайно полезный макрос. Получается изящно и красиво.
Правда, если честно, то для меня этот код, что филькина грамота. А получения именно заголовка статьи это вовсе какое-то волшебство. Как этот код определяет где на странице заголовок? Но все же он его определяет ))) ! Особенно полезно при вставке ссылок с русскоязычной википедии. Там в названии если в ссылке кириллица, то она отображается как длинный текст с непонятными символами. Теперь же они у меня будут аккуратно вставлены внутри самого названия, которое на русском. Да и слушать такой текст синтезатором на много приятнее, чем с ссылками которые просто вставлены рядом с текстом. Хотя в определенных случаях нужно достичь и обратного эффекта, т.е. что бы отображались ссылки, но это может позже. Это уже совсем другая тема.
Еще мелкий нюанс, вдруг кто тоже будет пробовать. У меня первый раз немного задумалось, да и второй. Выдало сообщение «Предупреждение системы безопасности». Но вроде бы, хотя я в этом не силен, в этом не хитром коде не чего такого опасного нет, поэтому я нажал разрешить. Потом стало работать на много быстрее. А так, насколько я понял, может не захотеть вставлять и заблокировать скрипт.

В общем добавлю себе это чудо в виде кнопочки на панельки быстрого доступа.
Еще раз большое спасибо!
Миниатюры
Как сделать макрос вставки гиперссылки в текст в ворде?  
0
 Аватар для BolgarchukR
0 / 0 / 2
Регистрация: 07.07.2015
Сообщений: 77
12.08.2018, 13:44  [ТС]
В коде нужно было еще дописать Quit
Visual BasicВыделить код
1
2
UrlTitle = .Document.Title
.Quit 'Закрытие InternetExplorer
Да, надо дописать. Т.к. к примеру при копировании ссылки с ютуба, тоже все прекрасно вставляется, но эта же ссылка запускается в интернет эксплорере.
А куда именно вставить? После End Function или перед... Почему то пока не удается вставить. Видать не туда вставляю. Выдает ошибки при срабатывании скрипта.
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
12.08.2018, 18:47
Цитата Сообщение от BolgarchukR Посмотреть сообщение
Еще мелкий нюанс, вдруг кто тоже будет пробовать. У меня первый раз немного задумалось, да и второй. Выдало сообщение «Предупреждение системы безопасности»
Да тут все просто, это реакция безопасности InternetExplorer именно в его параноидальных настройках по умолчанию
блокировка многих современных вэб-сайтов и доков (требуется понизить безопасность именно в Internet - Explorer )
можно конечно применить к этому макросу и другой вэб-инструмент но я ж не знаю как устроенна именно ваша система
поэтому предложил общий макрософтный вэб-инструмент который наиболее распространен в windows

Добавлено через 4 минуты
более того, для еще большей скорости можно привязывать макрос к сочетаниям клавиш
к примеру скопировал ссыль с firefox ctrl+c и вторым движением выполнил макрос в документе под его фокусом ctrl+u
тоесть два движения руки и все + чтоб меньше задержек было снизить безопасность о которой писал выше
на вирусни это никак не повлияет, получение заголовка не предпологает выполнение скриптов

Добавлено через 2 минуты
Цитата Сообщение от BolgarchukR Посмотреть сообщение
А куда именно вставить?

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Function UrlTitle(ByVal Url$) As String
    'Получение заголовка страницы по указанной ссылки
 
    With CreateObject("InternetExplorer.Application")
        .Navigate Url
        
        While .Busy 'ждем готовность документа
            DoEvents
        Wend
        UrlTitle = .Document.Title
        .Quit '-сюда
    End With
    
End Function
Добавлено через 14 минут
Цитата Сообщение от fever brain Посмотреть сообщение
можно конечно применить к этому макросу и другой вэб-инструмент
Как альтернатива класс Microsoft XML теперь окошек с вопросами точно не будет. к тому-же
этот класс также используется во всех системах

новый код
Кликните здесь для просмотра всего текста

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Option Explicit
 
 
 
Function UrlTitleXML(ByVal Url$) As String
    'Получение заголовка страницы по указанной ссылке классом Microsoft XML
    Dim title As String
    On Error Resume Next
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", Url, False
        .Send
        UrlTitleXML = Split(.ResponseText, "<title>", 2, 1)(1)
        UrlTitleXML = Split(UrlTitleXML, "</title>", 2, 1)(0)
    End With
End Function
 
 
 
 
Sub вставка_гиперссылки()
'
' вставка_гиперссылки Макрос
'
'
    With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        
        .GetFromClipboard
        If isUrl(.GetText) Then
            ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
                    .GetText, SubAddress:="", ScreenTip:="", _
                    TextToDisplay:=UrlTitleXML(.GetText)
        
        Else
            MsgBox "Текст буфера не является url"
        End If
        
 
    End With
    
    
 
End Sub
 
Function isUrl(ByVal Url$) As Boolean
    Dim v
    For Each v In Array("ftp://", "http://", "https://")
        If InStr(1, Url, v, 1) > 0 Then isUrl = 1: Exit For
    Next
End Function




Как назначить макросу сочетание клавиш
1
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
13.08.2018, 06:56
На рисунке получение ссылки и ее заголовка с ютюба

сама ссылка вот: https://www.youtube.com/watch?v=q4M_29PhD1E

на картинке результат в документе
Миниатюры
Как сделать макрос вставки гиперссылки в текст в ворде?  
0
13.08.2018, 07:47

Не по теме:

Цитата Сообщение от BolgarchukR Посмотреть сообщение
Гениально! Вы предвосхитили мои ожидания. Столько лет мучений… Сколько бы можно было сэкономить времени.
Мне конечно приятно о себе читать столь теплые слова. но всетаки скажу что это слишком эмоционально
все можно найти на просторах интернета. есть же способы поиска и расширенные возможности и тд.
особенно если заранее знать что требуется найти.
В моем случае я нашел инфу в трех местах. которая не относилась к данной теме, зато по которой
при желании можно дописать под себя

0
 Аватар для BolgarchukR
0 / 0 / 2
Регистрация: 07.07.2015
Сообщений: 77
31.08.2018, 23:40  [ТС]
Цитата Сообщение от fever brain Посмотреть сообщение
Как альтернатива класс Microsoft XML теперь окошек с вопросами точно не будет. к тому-же
этот класс также используется во всех системах
новый код
Еще раз спасибо. Теперь и окошко не появляется, и работает на много быстрее. А то почему-то у меня прошлый работал с небольшой задержкой, и не всегда вставлял, то открывал отладчик, то вставлял одну ссылку. Но опять же возможно это было только у меня так, хотя в безопасности интернет эксплорера поставил все на минимум, брандмауэр и антивирусник отключил. Впрочем, это уже не имеет значения, как я понял новый код работает по другому принципу и с настройками безопасности играться не надо.
Хотя у меня возник новый дополнительный вопрос. Часто приходится копировать ссылки с привязкой ко времени в длинных видео, может как-то можно сделать что бы они вставлялись как тайм коды в ворд? Сейчас они вставляются как обычные гиперссылки. Вот например как раз смотрю https://youtu.be/dys9AOFni64?t=1574 и конспектирую создавая привязки к тому или иному месту. Смотрю длинные видео часто, искать в них что-то повторно долго. А так, пока смотришь можно было бы вставлять в ворд короткие заметки с привязкой к тому или иному времени, так как это делается в комментариях: 26:14. Там кстати вставленное время именно в таком формате автоматом преобразуется в гиперссылку. Но сделать такое преобразование в ворде, в макросах, наверно не просто…

Не по теме:
Цитата Сообщение от fever brain Посмотреть сообщение
…особенно если заранее знать что требуется найти.
В моем случае я нашел инфу в трех местах. которая не относилась к данной теме, зато по которой
при желании можно дописать под себя
да, вот как раз дописывать под себя я и не умею. Да и действительно, надо знать, что искать, а для этого нужно достаточно неплохо разбираться в теме, для меня, как и наверное для многих, пока это довольно сложно.


Добавлено через 25 минут
п.с. ну или хотя бы сделать бы еще макрос вставляющий ссылку в выделенный текст. Конечно вышепредложенный макрос вставки ссылки внутрь названия автоматом, это уже весьма удобно и полезно, но помимо такой вставки, иногда удобнее вставить под произвольно выделенный текст. К примеру я скопировал ссылку с привязкой ко времени, написал в водре "кетогенная диета", выделил это словосочетание и одним кликом вставил в него ссылку. Что бы получилось примерно так кетогенная диета
0
 Аватар для BolgarchukR
0 / 0 / 2
Регистрация: 07.07.2015
Сообщений: 77
05.07.2020, 14:39  [ТС]
Не знаю как другие, но я долго пользовался этой удобной функцией. Более того, по-видимому, не только мне она приглянулась. В Google документах ссылка тоже вставляется именно так, без всяких макросов. Но это в Google документах.
Однако я пишу по другому поводу, макрос перестал корректно работать со ссылками YouTube. В начале, почему-то после название видео начала дописываться "YouTube", а теперь и вовсе вставляет только слово - "YouTube», без названия самого видео. То есть смысл работы макроса теряются, поскольку нет названия. Хотя под словом YouTube ссылка на нужное видео, но без названия самого видео.
С другими сайтами работает более-менее корректно. Проблема возникла только с Ютубом. Макрос тот же самый. Что они там накрутили... А может и не они. Может у меня какой-то конфликт в системе. На другой машине, пока, продолжает работать нормально. Не охота из-за такой мелочи переустанавливать всё заново. Может кто сталкивался? Подскажите пожалуйста.
0
05.07.2020, 15:14  [ТС]

Не по теме:

Странно не могу отредактировать сообщение. Надеюсь хоть добавить удастся
Пытался добавить фото для наглядности как это работает в гугл доках

Миниатюры
Как сделать макрос вставки гиперссылки в текст в ворде?  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.07.2020, 15:14
Помогаю со студенческими работами здесь

Как заменить текст гиперссылки ее самой?
Проблема: Совсем сломал голову, есть ли возможность в ячейке exel заменить текст &quot;напишите нам&quot; той гиперссылкой по которой...

Макрос вставки файлов в листы-Необходимо изменить ниже приведённый макрос
Необходимо изменить ниже приведённый макрос, взятый с форума. Необходима помощь. Буду признателен. Автору макроса особое спасибо. ...

Windows 8.1 отображает в программе гиперссылки как текст
На компьютере две ОС: Windows 8.1 и Windows 7 (обе x64). Открываю программу для настройки принтера. Под Windows 7 отображается всё...

Вывод гиперссылки как текст в ячейке Excel
Есть таблица, а в ней колонка, которая называется &quot;Код товара&quot;. В этой колонке в ячейках слово &quot;Код&quot; в виде гиперссылки (при...

Текст в ворде не так, как у всех
Прислали документ (колонтитулы,штамп, текст ариал наклонный.....) При открытии у себя (в 10-ом,7-ом,3-ем) шрифт не наклонный, штамп и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru