Недавно я обнаружил, что мой VBA больше не поддерживает код, который работал раньше. Когда я попытался открыть документ Objword.Documents.Open
, а затем docword.Activate
, документ открывается, но я получаю эту ошибку времени выполнения 4248: «команда недоступна, потому что ни один документ не открыт».
В ссылках на макросы VBA выбрана библиотека объектов MS Office 16.
Цените, если кто-нибудь может помочь с этим.
Ниже, если код:
ObjWord.Visible= True
Dim docword As object
Dim OCC as ContentControl
ObjWord.Activate
Set docWord = objWord.Documents.Open( Filename)
docWord.Activate-------Error
For each oCC In ActiveDocument.ContentControls
Select Case Occ.Title
Case abc
Occ.Range.Text
Не могли бы вы показать нам код, который вы выполняете, и объяснить, как он запускается? Что такое objWord
? Вы открываете новый экземпляр Word?
Действительно помогло бы показать больше кода, чтобы поместить ошибку в контекст.
Я внес изменения в вопрос, чтобы включить код.
doc.Word.Activate
похоже на опечатку. Ваша переменная документа называется docWord
. Если это не ваш точный код, скопируйте/вставьте точный код из редактора VBA. «Это своего рода мой код» не очень полезен для отладки. Содержит ли документ, который вы открываете, автоматически запускаемые макросы? Вы создаете новый экземпляр Word, чтобы открыть документ — если да, то зачем это делать?
Извините, это был только docWord.Activate. Я открываю шаблон и вношу в него изменения, единственный способ сделать это — открыть документ, обновить его и сохранить как новый файл.
Не могли бы вы проверить и сообщить мне, как решить эту проблему?
Поскольку вы установили переменную для документа, который вы открыли, вы не должны использовать ActiveDocument
. Ваш код должен работать независимо от того, активирован ли вновь открытый документ.
Итак, если ваш код не запускается из Word, он должен быть:
ObjWord.Visible= True
Dim docWord As Document
Dim OCC as ContentControl
ObjWord.Activate
Set docWord = objWord.Documents.Open(Filename)
For each oCC In docWord.ContentControls
Select Case Occ.Title
Case abc
Occ.Range.Text
Спасибо, это помогло мне решить проблему.
Операции ввода-вывода (сохранение, открытие, копирование, вставка) обычно выполняются медленнее, чем ваш код. Команда «Активировать» не может быть запущена, так как она запущена до фактического открытия документа. Ищите способы приостановить свой код с помощью поисковых запросов, таких как «слово» VBA sleep doevents