Настройка диапазона в Word с VBA в Excel - PullRequest
1 голос
/ 08 февраля 2020

Как установить диапазон в Word при открытии этого файла с помощью VBA в Excel?

Dim wordApp As Word.Application
Dim wordObject As Word.Document
Dim wordRange As Word.Range

Dim filePath As String
Dim fileName As String

filePath = "C:\Users\"
fileName = "somename.docx"

Set wordApp = CreateObject("Word.Application")

With wordApp
    .Visible = True
    .Activate
    .WindowState = wdWindowStateNormal
End With

Set wordObject = wordApp.Documents.Open(filePath & fileName)

Set wordRange = Documents(fileName).Sections(1).Range

With wordRange
    'code
End With

Строка, вызывающая проблемы:

Set wordRange = Documents(fileName).Sections(1).Range

Независимо от введенной строки это возвращает

4160 ошибка времени выполнения "Bad File Name"

Если я использую ActiveDocument вместо Documents(), я получаю

Ошибка 4248 во время выполнения: «Эта команда недоступна, так как не открыт ни один документ».

Ошибка сохраняется даже после открытия нескольких несохраненных и сохраненных документов Word во время выполнения кода, только чтобы иметь ту же ошибку сообщение появляется.

1 Ответ

2 голосов
/ 09 февраля 2020

Set wordRange = Documents(fileName).Sections(1).Range ошибки, потому что Excel не знает, что такое Documents (или он разрешает его в чем-то отличном от Word.Documents)

Чтобы исправить это, вы должны использовать (так же, как и вы в предыдущей строке)

Set wordRange = wordApp.Documents(fileName).Sections(1).Range

Тем не менее, вы уже Set Document(filepath & filename) до wordObject, поэтому используйте его:

Set wordRange = wordObject.Sections(1).Range


Кроме того, Excel не знает wdWindowStateNormal, поэтому создается новая переменная Variant (если у вас нет Option Explicit, что следует, всегда ) и присвоили значение по умолчанию 0. Это просто значение Word.wdWindowStateNormal, так что никакого вреда, но код вводит в заблуждение.

Чтобы исправить, используйте

.WindowState = 0 'wdWindowStateNormal

Мне интересно как вы создали объект. Используя раннее связывание, но вместо создания New Word.Application вы используете CreateObject

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