Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2010, 08:12   #1
Frommerrr
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 10
По умолчанию Быстрое добавление закладки

Такой вопрос. Вот есть к примеру такой текст, как ниже. Возможно ли с помощью макроса сделать так, чтобы выделив мышкой жирный текст одним нажатием кнопки макроса или сочетанием клавиш добавить закладку в документ именно с именем выделенного текста? И чтобы потом можно было выделить другой текст и также добавить в закладки, но так чтобы первая закладка не пропала. Для меня тяжело бывает когда ты выделяешь текст, потом открываешь добавить закладку, вставляешь текст, заменяешь пробелы к примеру нижним подчеркиванием и только потом нажимаешь ок. Нельзя ли это автоматизировать -- выделил текст - нажал кнопку - закладка готова?

Доиндустриальное общество. Эту стадию также принято называть традиционной или аграрной.
Frommerrr вне форума Ответить с цитированием
Старый 28.03.2010, 11:18   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Попробуй так.
Код:
Sub QuickBookmark()
  ActiveDocument.Bookmarks.Add Replace(Selection.Text, " ", "_"), _
  Selection.Range
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 28.03.2010, 20:28   #3
Frommerrr
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 10
По умолчанию

Спасибо Вам viter.alex. А если в конце слова не пробел, а запятая закладка не создается, что нужно в коде исправить?

Последний раз редактировалось Frommerrr; 28.03.2010 в 21:09.
Frommerrr вне форума Ответить с цитированием
Старый 28.03.2010, 21:46   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Использованная мной функция Replace заменяет в строке пробелы на подчёркивание. Аналогично можно удалить и другие "неправильные" символы. Додумайте сами
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 29.03.2010, 19:58   #5
Frommerrr
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 10
По умолчанию

Ув. viter.alex додумался только до этого, но после создания закладки, в тексте удаляются те символы которые я удалил, а мне нужно чтобы они вернулись в то состояние в котором были изначально. Добиться этого можно только тем, что после создания закладики два раза нажать отмену операции (Ctrl+Z). А без отмены можно как-нибудь. Помогите или скажите где копать.


Sub QuickBookmark()
With Selection.Find
.Text = "[,]"
.Replacement.Text = ""
.Execute Replace:=wdReplaceAll
End With
ActiveDocument.Bookmarks.Add Replace(Selection.Text, " ", "_"), _
Selection.Range
Selection.Collapse direction:=wdCollapseStart
End Sub

Последний раз редактировалось Frommerrr; 29.03.2010 в 20:09.
Frommerrr вне форума Ответить с цитированием
Старый 29.03.2010, 20:12   #6
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Эт вы круто взяли с поиском и заменой! Но в данном случае всё гораздо проще:
Код:
Sub QuickBookmark()
  Dim sBmName As String
  'Заменяем пробелы на подчёркивания
  sBmName = Replace(Selection.Text, " ", "_")
  'Удаляем запятые
  sBmName = Replace(sBmName, ",", "")
  ActiveDocument.Bookmarks.Add sBmName, Selection.Range
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 29.03.2010, 22:10   #7
Frommerrr
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 10
По умолчанию

Термин "Макиавеллизм".

Всплыл еще один вопрос. Если удалять знаки, как Вы научили, то запинка происходит, когда нужно создать закладку из текста указанного выше. Так же не получается с длинным тире (при вставке в редактор он заменяется на дефис). Просто хочется делать закладку из любого текста. Это возможно в принципе? С уважением.

Sub QuickBookmark()
Dim sBmName As String
'Заменяем пробелы на подчёркивания
sBmName = Replace(Selection.Text, " ", "_")
'Удаляем запятые
sBmName = Replace(sBmName, ",", "")
sBmName = Replace(sBmName, "-", "")
sBmName = Replace(sBmName, ".", "")
sBmName = Replace(sBmName, ";", "")
sBmName = Replace(sBmName, ":", "")
sBmName = Replace(sBmName, "?", "")
sBmName = Replace(sBmName, "!", "")
sBmName = Replace(sBmName, "(", "")
sBmName = Replace(sBmName, ")", "")
ActiveDocument.Bookmarks.Add sBmName, Selection.Range
End Sub
Frommerrr вне форума Ответить с цитированием
Старый 29.03.2010, 23:03   #8
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Возможно. Кавычку нужно записать так:
Код:
""""
А длинное тире записывается так (151 — это код символа)
Код:
ChrW(151)
т.е. получится
Код:
sBmName = Replace(sBmName, """", "") 'Для кавычки
sBmName = Replace(sBmName, Chr(151), "") 'Для длинного тире
На всякий случай: короткое тире (–) имеет код 150, левая угловая кавычка («) имеет код 171, а правая (») — 187
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 30.03.2010 в 00:56. Причина: Заменил ChrW на Chr
viter.alex вне форума Ответить с цитированием
Старый 29.03.2010, 23:49   #9
Frommerrr
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 10
По умолчанию

Странно - с кавычками получается, а с длинным тире никак. Делал как научили.

Последний раз редактировалось Frommerrr; 29.03.2010 в 23:53.
Frommerrr вне форума Ответить с цитированием
Старый 30.03.2010, 00:47   #10
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Выдели это длинное тире и запусти такой макрос:
Код:
Sub GetCode()
  MsgBox Asc(Selection.Text)
End Sub
Посмотри какой код символа возвращает. Длинное тире должно отделяться слева неразрывным пробелом, его тоже нужно удалять. Его код — 160

Добавлено позже
Моя вина. Вместо ChrW нужно использовать Chr. В примере внёс исправления
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 30.03.2010 в 00:56.
viter.alex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быстрое решение учебных задач prog-f1 Фриланс 9 26.02.2011 10:29
Быстрое форматирование диска Anders Безопасность, Шифрование 9 25.04.2010 19:04
Быстрое удаление дублирующихся слов :). Utkin Общие вопросы Delphi 21 01.02.2010 08:25
Быстрое преобразование Фурье (комментарии). brendog Общие вопросы C/C++ 2 21.07.2009 01:15