Использование rngStory из EXCEL - PullRequest
1 голос
/ 07 июня 2019

У меня есть следующий скрипт, который запускается из EXCEL, открывает файл слов, а затем выполняет поиск и замену в каждом из StoryRanges в документе.

Я получаю ошибку компиляции: «Аргумент не является обязательным» в строке
С rngStory.Find.

Так что мне нужно передать аргумент в функцию Find.

Но, если я запускаю тот же код из документа Word, заменяя «Для каждой версии в WordDoc.StoryRanges» с Для каждого rngStory в ActiveDocument.StoryRanges У меня нет проблем с запуском кода, и здесь функции Find не нужен параметр.

Почему это?

Sub test()
  Dim WordApp As Object
  Set WordApp = CreateObject("Word.Application")
  Dim WordDoc As Object
  Set WordDoc = WordApp.Documents.Open("G:\Bruger\KBU\template_file.docx")
  Dim rngStory As Range
  For Each rngStory In WordDoc.StoryRanges
    With rngStory.Find
      .Text = "find text"
      .Replacement.Text = "I'm found"
      .Wrap = wdFindContinue
      .Execute Replace:=wdReplaceAll
    End With
  Next rngStory
End Sub

БР Крестен

Ответы [ 2 ]

1 голос
/ 07 июня 2019

По умолчанию в Excel создается Excel.Range (что отличается от Word.Range).Чтобы решить, просто определите rngStory как Word.Range, и оно будет работать.
Я также изменил способ инициализации WordApp, так как вам все равно нужно добавить Reference:

Sub test()
  Dim WordApp As New Word.Application
  Dim WordDoc As Word.Document
  Set WordDoc = WordApp.Documents.Open("G:\Bruger\KBU\template_file.docx")
  Dim rngStory As Word.Range
  For Each rngStory In WordDoc.StoryRanges
    With rngStory.Find
      .Text = "find text"
      .Replacement.Text = "I'm found"
      .Wrap = wdFindContinue
      .Execute Replace:=wdReplaceAll
    End With
  Next rngStory
End Sub

Примечание : если у вас нетt, добавьте Microsoft Word XX.0 Object Library к своим ссылкам, в противном случае вы получите ошибку.

Надеюсь, это поможет.

0 голосов
/ 07 июня 2019

При вызове кода VBA из разных приложений (Excel, Word) по умолчанию используется соответствующая модель приложения (Excel.Application, Word.Application).

Итак, когда вы звоните этой части

Dim rngStory As Range

В Excel создается Excel.Range, а в Word Word.Range.

Итак, попробуйте следующий обходной путь:

Sub test()
  Dim WordApp As Object
  Set WordApp = CreateObject("Word.Application")
  Dim WordDoc As Object
  Set WordDoc = WordApp.Documents.Open("G:\Bruger\KBU\template_file.docx")
  Dim rngStory
  For Each rngStory In WordDoc.StoryRanges
    With rngStory.Find
      .Text = "find text"
      .Replacement.Text = "I'm found"
      .Wrap = wdFindContinue
      .Execute Replace:=wdReplaceAll
    End With
  Next rngStory
End Sub

В любом случае вам нужно будет получить доступ к модели Word Object для значения wdFindContinue, поэтому включите ссылку:

howto

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...