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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2010, 19:11   #11
forumWord
Пользователь
 
Регистрация: 23.09.2010
Сообщений: 65
По умолчанию

Вождь,
Цитата:
' ищем закладку
If ActiveDocument.Bookmarks.Exists(N) <> True Then
Это не поиск закладки, а система защиты от удаления нужного: удалится должна только закладка. Хотя сейчас подумал, если в документе есть текст, совпадающий с именем закладки, то тогда и текст может удалится нужный. Значит надо усовершенствовать систему защиты.
forumWord вне форума Ответить с цитированием
Старый 17.11.2010, 19:23   #12
Окоча Юра
Форумчанин
 
Регистрация: 16.02.2009
Сообщений: 122
По умолчанию

Цитата:
Сообщение от Вождь Посмотреть сообщение
Развил идею (см. комментарии):
Код:
Public Sub Bookmark_TypedGo()
' переход к закладке по имени набранному в документе
' - если выбран текст, то считаем его именем
' - ничего не выбрано, то имя перед курсором,
'   начиная с начала абзаца или заданного символа

Const c_StartChars$ = " >" ' набор символов начала закладки

Dim R As Range
Dim N$
Dim L&
    
    ' область имени закладки
    Set R = Selection.Range
    If R.Start < R.End Then
        ' уже выбрана
        N = R.Text ' имя
    Else
        ' перед курсором
        L = R.Paragraphs.First.Range.Start - R.Start
        If R.MoveStartUntil(Cset:=c_StartChars, Count:=L) < 0 Then
            N = R.Text ' имя
            R.MoveStart Unit:=Word.wdCharacter, Count:=-1
        Else
            R.MoveStart Unit:=Word.wdCharacter, Count:=L
            N = R.Text ' имя
        End If
    End If
    N = Trim$(N) ' чистим имя
    
    ' ищем закладку
    If ActiveDocument.Bookmarks.Exists(N) <> True Then
        ' нет закдаки
        StatusBar = "Нет закладки c именем """ & N & """"
    Else
        ' удаляем имя
        L = R.Characters.Count
        R.Collapse Direction:=Word.wdCollapseStart
        R.Delete Unit:=Word.wdCharacter, Count:=L
        ' переход к закладке
        ActiveDocument.Bookmarks(N).Range.Select
        Selection.Collapse Direction:=Word.wdCollapseStart
    End If
    
End Sub
макрос хорош, но еще немножко до совершенства:
когда я ввожу название закладки, нажимаю макрос, автоматом перехожу в начало нужной закладки при этом набранное название закладки автоматом удаляется, то заодно с названием закладки удаляется пробел что стоит перед этим словом, можно ли сделать чтобы пробел оставался на месте...
например: пишу "Украина - наша аародина" нажимаю макрос, курсор переходит в начало нужной закладки, при этом слово "аа" удаляется вместе с пробелом между словами "наша" и "родина" и получается такое: "Украина - нашародина", а нужно чтобы пробел между ними остался...
Юрик
Окоча Юра вне форума Ответить с цитированием
Старый 17.11.2010, 19:24   #13
Окоча Юра
Форумчанин
 
Регистрация: 16.02.2009
Сообщений: 122
По умолчанию

Цитата:
Сообщение от forumWord Посмотреть сообщение
Окоча Юра, вот это
Код:
Selection.MoveLeft
надо поместить после
Код:
Selection.GoTo What:=wdGoToBookmark, Name:=vИмяЗакладки
спасибо...
Юрик
Окоча Юра вне форума Ответить с цитированием
Старый 17.11.2010, 19:40   #14
forumWord
Пользователь
 
Регистрация: 23.09.2010
Сообщений: 65
По умолчанию

Окоча Юра, я тестировал коды при условии, что имя закладки вводится в конце абзаца. Если имя закладки вводится в другом месте, то нужна доработка кода. Т.к. если ввести имя закладки, а затем поставить пробел, чтобы отделить имя закладки от текста в документе, то тогда третий код не будет работать.

Завтра ещё посмотрю.

Последний раз редактировалось forumWord; 17.11.2010 в 19:43.
forumWord вне форума Ответить с цитированием
Старый 17.11.2010, 19:49   #15
Окоча Юра
Форумчанин
 
Регистрация: 16.02.2009
Сообщений: 122
По умолчанию

Цитата:
Сообщение от forumWord Посмотреть сообщение
Окоча Юра, я тестировал коды при условии, что имя закладки вводится в конце абзаца. Если имя закладки вводится в другом месте, то нужна доработка кода. Т.к. если ввести имя закладки, а затем поставить пробел, чтобы отделить имя закладки от текста в документе, то тогда третий код не будет работать.

Завтра ещё посмотрю.
ок., тогда пока будем использовать 2-ой макрос и не ставить "_" в названиях закладки...еще хороший макрос написал товарищ по форуму...
Юрик
Окоча Юра вне форума Ответить с цитированием
Старый 17.11.2010, 21:10   #16
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Про контрол-шифт-F5 забыли?

http://programmersforum.ru/showthread.php?t=109084
Sasha_Smirnov вне форума Ответить с цитированием
Старый 17.11.2010, 21:45   #17
Окоча Юра
Форумчанин
 
Регистрация: 16.02.2009
Сообщений: 122
По умолчанию

Цитата:
Сообщение от Sasha_Smirnov Посмотреть сообщение
Про контрол-шифт-F5 забыли?

http://programmersforum.ru/showthread.php?t=109084
ghj контрол-шифт-F5 не забыл - а зачем он...если оказывается есть прекрасные макросы, думаю не только мне будут полезные...лучше помогите добить эти макросы своим свежим взглядом
Юрик
Окоча Юра вне форума Ответить с цитированием
Старый 18.11.2010, 09:37   #18
forumWord
Пользователь
 
Регистрация: 23.09.2010
Сообщений: 65
По умолчанию

Не знаю, что ещё добавить. Обязательное условие применения макроса: вставка пробела перед именем закладки. После пробел не нужен.
Код:
Sub Макрос6()
Dim vИмяЗакладки As String
Do While InStr(Selection.Text, " ") = 0
    Selection.MoveLeft unit:=wdCharacter, Extend:=wdExtend
Loop
Selection.MoveRight unit:=wdCharacter, Extend:=wdExtend
vИмяЗакладки = Selection.Text
If ActiveDocument.Bookmarks.Exists(vИмяЗакладки) = True Then
    Selection.Delete
    Selection.GoTo What:=wdGoToBookmark, Name:=vИмяЗакладки
    Selection.MoveLeft
Else
    MsgBox "Такой закладки нет"
End If
End Sub

Последний раз редактировалось forumWord; 18.11.2010 в 14:07.
forumWord вне форума Ответить с цитированием
Старый 18.11.2010, 12:43   #19
Окоча Юра
Форумчанин
 
Регистрация: 16.02.2009
Сообщений: 122
По умолчанию

Цитата:
Сообщение от forumWord Посмотреть сообщение
Не знаю, что ещё добавить. Обязательное условие применения макроса: вставка пробела перед именем закладки. После пробел не нужен.
Код:
Sub Макрос6()
Dim vИмяЗакладки As String
Do While InStr(Selection.Text, " ") = 0
    Selection.MoveLeft unit:=wdCharacter, Extend:=wdExtend
Loop
Selection.MoveRight unit:=wdCharacter, Extend:=wdExtend
vИмяЗакладки = Selection.Text
If ActiveDocument.Bookmarks.Exists(vИмяЗакладки) = True Then
    Selection.Delete
    Selection.GoTo What:=wdGoToBookmark, Name:=vИмяЗакладки
Else
    MsgBox "Такой закладки нет"
End If
End Sub
а больше и не надо ничего добавлять - то что надо! - макрос супер...думаю многим будет полезен..Спасибо...
Юрик
Окоча Юра вне форума Ответить с цитированием
Старый 19.11.2010, 10:56   #20
Окоча Юра
Форумчанин
 
Регистрация: 16.02.2009
Сообщений: 122
По умолчанию

все макросы работают отлично...всем спасибо.
Юрик

Последний раз редактировалось Окоча Юра; 19.11.2010 в 11:46.
Окоча Юра вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
быстрый переход в закладку Окоча Юра Microsoft Office Word 15 11.04.2011 16:53
Быстрый парсинг картинки JDredd C++ Builder 13 09.02.2011 21:30
Самый быстрый браузер Marsel737 Софт 31 30.08.2010 01:09
Быстрый запуск. Chudo4258 Помощь студентам 4 09.04.2010 20:30
Быстрый перевод сайта ! Slappy Помощь студентам 0 24.01.2010 16:09