Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Не работает замена Добавлено: 11.10.09 17:40  

Автор вопроса:  Neon121
Здравствуйте
В Access пытаюсь заставить работать следующий код.
Смысл кода в том, чтобы открыть файл C:\letter.doc и заменить в нем маячок <<organizationname>> на подставное, в данном случае на Trylala, после чего сохранить документ и закрыть. Функция Debug.Print должна тот самый целевой кусочек контента отпостить, дабы я увидел, произошли ли изменения
Sub Edit_letter()

Set appWord = CreateObject("Word.Application")
With appWord
    .Documents.Open FileName:="C:\letter.doc", ReadOnly:=False
    With .ActiveDocument.content.Find
        .Text = "<<organizationname>>"
        .Replacement.Text = "Trylala"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        .Execute Replace:=wdReplaceAll
    End With
    
    Debug.Print Left(.ActiveDocument.content, 34)
    
    .ActiveDocument.Save
    .Quit
End With
End Sub


Проблема в том, что замена не работает. При этом, ActiveDocument.content правильно возвращает содержимое документа, редактировать документ тоже можно. Еще одна особенность заключается в том, что если перенести этот код в Word (с некоторой редакцией, в частности, убрав пемеренную appWord), то код работает корректно
Помогите, пожалуйста

Ответить

  Ответы Всего ответов: 1  

Номер ответа: 1
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #1
Добавлено: 15.10.09 19:37
appWord лучше все-таки объявить явно как объектную переменную, в конце кода процедуры объект не забывай уничтожать тоже явно. А вообще все не работает из=за того, что не указаны значения констант wdFindContinue и wdReplaceAll. В Word они понятное дело инициализированы библиотекой поддержки. Чтобы в будущем избегать таких косяков с нормальным в общем кодом, советую всегда пользоваться Option Explicit. Ниже проверенный исправленный рабочий код:
  1. Option Explicit
  2.  
  3. Sub Edit_letter()
  4.     Dim appWord As Object
  5.     Const wdFindContinue = 1
  6.     Const wdReplaceAll = 2
  7.     Set appWord = CreateObject("Word.Application")
  8.     With appWord
  9.         .Documents.Open Filename:="C:\letter.doc", ReadOnly:=False
  10.         With .ActiveDocument.content.Find
  11.             .Text = "<<organizationname>>"
  12.             .Replacement.Text = "Trylala"
  13.             .Forward = True
  14.             .Wrap = wdFindContinue
  15.             .Format = False
  16.             .MatchCase = False
  17.             .MatchWholeWord = False
  18.             .MatchWildcards = False
  19.             .MatchSoundsLike = False
  20.             .MatchAllWordForms = False
  21.             .Execute Replace:=wdReplaceAll
  22.         End With
  23.         
  24.         Debug.Print Left(.ActiveDocument.content, 34)
  25.         
  26.         .ActiveDocument.Save
  27.         .Quit
  28.     End With
  29.     Set appWord = Nothing
  30. End Sub

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам