Страницы: 1
RSS
VBA Excel Word поиск и замена текста
 
Добрый день, уважаемые форумчане.  
Опишу ситуацию.  
1) Есть файл выгрузки из Sap он сохраняется на рабочем столе под именем."print_template.xls"  
2) Написан макрос в эксель"Печать форм.xls", который открывает файл шаблона документа в ворд "Юр _форм _автозамена.doc" находит в нем специальные коды в скобочках к примеру [spec001] и меняет их на значение из файла выгрузки "print_template.xls".
Все работает замечательно, кроме значений в колонтитулах.  
Почему-то после повтороного прохождения колонтитула (поиска и замены) переменная очищается, и поэтому не все коды в скобочках заменяются.  
В самом документе тот же код работает замечательно.  
Подскажите пожалуйста в чем может быть проблема?
 
Судя по всему в функции  Function SearchInRange(oDoc, oRng, obook, l As Object) при замене  кодов на текст, меняется переменная oRng и L ( диапазон заменяемого текста) первый раз на сам код [], а потом вообще "".
Как это можно побороть?  
После передачи переменной в функции я ее не меняю, но ее значение почему-то меняется в коде.  
Заранее спасибо
 
У меня есть готовая программа для этих целей:  http://excelvba.ru/programmes/FillDocuments <BR>Там есть опция подстановки значений в колонтитулы, и все корректно работает. (это если вам надоест писать код, и захотите воспользоваться готовым решением)
 
EducatedFool, спасибо за предложение, но мне к сожалению не подойдет.
 
Всем спасибо, разобрался.  
 
Function SearchInRange(oDoc, oRng, obook, l As Object) As Boolean  
Dim klop As Object, Z As Boolean  
Set klop = l  
'Задаем цикл и потом передаем параметры в функцию DoReplace  
 With oRng.Find  
       .Text = "[[]?*[]]"
       .Forward = True  
       .Wrap = wdFindContinue  
       .Format = False  
       .MatchWildcards = True  
       .Execute  
End With  
Do While oRng.Find.Found = True  
'oRng.Find.Execute  
  If Not oRng = "" Then Codes = oRng  
  'If Not oRng = "" Then Codes = Mid(oRng, 2, Len(oRng) - 2)  
Set sRow = obook.Sheets(1).Cells.Find(What:=Codes, After:=ActiveCell, LookIn:=xlFormulas, LookAt _  
       :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _  
       False, SearchFormat:=False)  
If Not sRow Is Nothing Then  
       sRow = sRow.Row  
       Values = obook.Sheets(1).Range("B" & sRow).Value  
       If Len(Values) > 240 Then Values = Left(Values, 240)  
       Call DoReplace(klop:=klop, strFind:=oRng, strReplace:=Values)  
Else:  
   oRng.HighlightColorIndex = wdRed ' Заливаем проблемные коды красным  
  If Not oRng = "" Then Codes = Mid(oRng, 2, Len(oRng) - 2)  
   Values = Chr(34) & Codes & Chr(34)  
   Call DoReplace(klop:=klop, strFind:=oRng, strReplace:=Values)  
End If  
oRng.Find.Text = "[[]?*[]]"
oRng.Find.Forward = True  
oRng.Find.Wrap = wdFindContinue  
oRng.Find.Format = False  
oRng.Find.MatchWildcards = True  
oRng.Find.Execute
 
Loop  
End Function  
В функции, исправления выделил жирным шрифтом.  
Больше никаких манипуляций не делал, заработало как часы.  
 
Тему можно закрывать
Страницы: 1
Читают тему
Наверх
Loading...