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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2013, 22:28   #1
caute
Форумчанин
 
Регистрация: 27.10.2009
Сообщений: 277
По умолчанию Команда замены по всему тексту

Имеется макрос простой замены (одни буквы на другие). Какую строчку в него надо добавить, чтобы замена проводилась не только по основному тексту, но и по сноскам (концевым и постраничным)?
caute вне форума Ответить с цитированием
Старый 24.05.2013, 00:32   #2
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,077
По умолчанию

мой вариант
Код:
Sub a_130524_hold()
'
Dim z1, z1k
''''''''''''''''''''''''''zamena'''''''''''''''''''''''''''''''''
z1 = "hold"
z1k = "````"
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
 Selection.Find.ClearFormatting
 Selection.Find.Replacement.ClearFormatting
 With Selection.Find
  .Text = z1
  .Replacement.Text = z1k
  .Forward = True
  .Wrap = wdFindContinue
  .Format = False
  .MatchCase = False
  .MatchWholeWord = False
  .MatchByte = False
  .MatchWildcards = False
  .MatchSoundsLike = False
  .MatchAllWordForms = False
 End With
 Selection.Find.Execute Replace:=wdReplaceAll
 ''''
 Dim sn1 As Footnote, s1
 For Each sn1 In Word.ActiveDocument.Footnotes
 s1 = Replace(sn1.Range.Text, z1, z1k, , , vbTextCompare)
 sn1.Range.Text = s1
 Next sn1
 Dim sn2 As Endnote, s2
 For Each sn2 In Word.ActiveDocument.Endnotes
 s1 = Replace(sn2.Range.Text, z1, z1k, , , vbTextCompare)
 sn2.Range.Text = s1
 Next sn2
End Sub
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 24.05.2013, 05:41   #3
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Код:
Sub Procedure_1()

    Dim rngFootnotes As Word.Range
    Dim rngEndnotes As Word.Range
    
    'Концевые сноски в Word-документе собраны в каком-то месте (Story).
    'Постраничные сноски в Word-документе собраны в каком-то месте (Story).
    
    'Даём этим "Story" VBA-имена "rngFootnotes" и "rngEndnotes".
    Set rngFootnotes = ActiveDocument.StoryRanges(wdFootnotesStory)
    Set rngEndnotes = ActiveDocument.StoryRanges(wdEndnotesStory)
    
    'Поиск и замена в постраничных сносках.
    With rngFootnotes.Find
        .Text = "Сноска"
        .Replacement.Text = "Footnote"
        .Execute Replace:=wdReplaceAll
    End With

    'Поиск и замена в концевых сносках.
    With rngEndnotes.Find
        .Text = "Концевая сноска"
        .Replacement.Text = "Endnote"
        .Execute Replace:=wdReplaceAll
    End With

End Sub
Примечание

В VBA-Word можно вести поиск с использованием "Selection" и с использованием "Range". Поиск с использованием "Selection" связан с окном "Найти и заменить", которое есть в программе "Word". Поэтому, прежде чем вести поиск с использованием "Selection", нужно подготовить объект "Find" - нужно убрать настройки от предыдущего поиска, например:
Код:
Selection.Find.ClearFormatting
При использовании поиска с "Range" очистку от предыдущих параметров поиска делать не надо, а можно сразу указывать нужные параметры. Это связано с тем, что при каждом поиске с использованием "Range" в оперативной памяти компьютера создаётся новый экземпляр объекта "Find", который имеет значения по умолчанию.

Последний раз редактировалось Скрипт; 24.05.2013 в 05:48.
Скрипт вне форума Ответить с цитированием
Старый 24.05.2013, 07:48   #4
caute
Форумчанин
 
Регистрация: 27.10.2009
Сообщений: 277
По умолчанию

shanemac51
Не воспринимаются регулярные выражения. Кроме того, этот макрос требует переписать все мои макросы замены заново. А нельзя ли просто добавить какие-то строчки к уже существующим макросам, чтобы они стали обрабатывать и сноски?
Например, вот к такому:
Код:
Sub том_страница()
' 10.01.2010
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = ". Т. "
        .Replacement.Text = ", т.^s"
        .Forward = True
        .Wrap = wdFindContinue
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    With Selection.Find
        .Text = ". С. "
        .Replacement.Text = ", с.^s"
        .Forward = True
        .Wrap = wdFindContinue
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    With Selection.Find
        .Text = ". Ч. "
        .Replacement.Text = ", ч.^s"
        .Forward = True
        .Wrap = wdFindContinue
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    With Selection.Find
        .Text = ", т. "
        .Replacement.Text = ", т.^s"
        .Forward = True
        .Wrap = wdFindContinue
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    With Selection.Find
        .Text = ", с. "
        .Replacement.Text = ", с.^s"
        .Forward = True
        .Wrap = wdFindContinue
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    With Selection.Find
        .Text = ", p. "
        .Replacement.Text = ", p.^s"
        .Forward = True
        .Wrap = wdFindContinue
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Скрипт, Ваш макрос выдает ошибку: Run-time error '5941'
caute вне форума Ответить с цитированием
Старый 24.05.2013, 08:09   #5
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

caute, да, если в документе нет постраничных и концевых сносок, то будет ошибка. Нужно внести изменения в код, чтобы проводилась проверка: существуют ли постраничные и концевые сноски.
Скрипт вне форума Ответить с цитированием
Старый 24.05.2013, 08:32   #6
caute
Форумчанин
 
Регистрация: 27.10.2009
Сообщений: 277
По умолчанию

постраничные были, концевых не было, да
caute вне форума Ответить с цитированием
Старый 24.05.2013, 10:04   #7
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,077
По умолчанию

подпрограмма
Код:
Sub том_страница130524()
' 10.01.2010
 frepl30 ". Т. ", ", т.^s"
 frepl30 ". С. ", ", с.^s"
 frepl30 ". Ч. ", ", ч.^s"
 frepl30 ", т. ", ", т.^s"
 frepl30 ", с. ", ", с.^s"
 frepl30 ", p. ", ", p.^s"
   
End Sub
Sub frepl30(chto, chem)
'
Dim z1, z1k
z1 = chto
z1k = chem
 Selection.Find.ClearFormatting
 Selection.Find.Replacement.ClearFormatting
 With Selection.Find
  .Text = z1
  .Replacement.Text = z1k
  .Forward = True
  .Wrap = wdFindContinue
  .Format = False
  .MatchCase = False
  .MatchWholeWord = False
  .MatchByte = False
  .MatchWildcards = False
  .MatchSoundsLike = False
  .MatchAllWordForms = False
 End With
 Selection.Find.Execute Replace:=wdReplaceAll
 ActiveWindow.ActivePane.VerticalPercentScrolled = 0
 Dim sn1 As Footnote, s1
 For Each sn1 In Word.ActiveDocument.Footnotes
 s1 = Replace(sn1.Range.Text, z1, z1k, , , vbTextCompare)
 sn1.Range.Text = s1
 Next sn1
 Dim sn2 As Endnote, s2
 For Each sn2 In Word.ActiveDocument.Endnotes
 s1 = Replace(sn2.Range.Text, z1, z1k, , , vbTextCompare)
 sn2.Range.Text = s1
 Next sn2
End Sub
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 24.05.2013, 10:29   #8
caute
Форумчанин
 
Регистрация: 27.10.2009
Сообщений: 277
По умолчанию

опять не учитывает регулярных выражений.
получается на выходе: "т.^s1, с.^s2"
на месте ^s должен быть неразрывный пробел
а вообще - полезный макрос, особенно когда сотня замен - спасибо!
caute вне форума Ответить с цитированием
Старый 25.05.2013, 03:11   #9
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Цитата:
Сообщение от caute Посмотреть сообщение
опять не учитывает регулярных выражений
Наберите прямо в коде на месте ^s символ с кодом 0160 — Alt держим, 0160 набираем справа, на цифровой клавиатуре.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 25.05.2013, 10:22   #10
caute
Форумчанин
 
Регистрация: 27.10.2009
Сообщений: 277
По умолчанию

Код:
frepl30 ". Т. ", ", т.^s"
должна выглядеть в этом случае как?
caute вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить процент больших и маленьких букв ко всему тексту Kirra Паскаль, Turbo Pascal, PascalABC.NET 3 08.12.2011 05:46
Рассылка сообщения всему кл в TICQClient hacker_007 Работа с сетью в Delphi 0 20.09.2011 19:31
Команда System: запуск программы в свёрнутом режиме, Не работает команда /min Me777 Общие вопросы C/C++ 0 12.07.2011 11:49
Макрос поиска по всему документу Polotenchik Microsoft Office Word 20 11.06.2011 12:00
Поиск файла по всему компьютеру!!!!! Flippp Общие вопросы C/C++ 17 05.08.2009 11:57