Как избавиться от ошибки с управлением содержимым в VBA Word Automation

Недавно я обнаружил, что мой 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

Операции ввода-вывода (сохранение, открытие, копирование, вставка) обычно выполняются медленнее, чем ваш код. Команда «Активировать» не может быть запущена, так как она запущена до фактического открытия документа. Ищите способы приостановить свой код с помощью поисковых запросов, таких как «слово» VBA sleep doevents

John Korchok 13.04.2023 18:08

Не могли бы вы показать нам код, который вы выполняете, и объяснить, как он запускается? Что такое objWord? Вы открываете новый экземпляр Word?

FunThomas 13.04.2023 18:14

Действительно помогло бы показать больше кода, чтобы поместить ошибку в контекст.

Tim Williams 13.04.2023 18:19

Я внес изменения в вопрос, чтобы включить код.

Nikita Tiwari 13.04.2023 18:43
doc.Word.Activate похоже на опечатку. Ваша переменная документа называется docWord. Если это не ваш точный код, скопируйте/вставьте точный код из редактора VBA. «Это своего рода мой код» не очень полезен для отладки. Содержит ли документ, который вы открываете, автоматически запускаемые макросы? Вы создаете новый экземпляр Word, чтобы открыть документ — если да, то зачем это делать?
Tim Williams 13.04.2023 19:37

Извините, это был только docWord.Activate. Я открываю шаблон и вношу в него изменения, единственный способ сделать это — открыть документ, обновить его и сохранить как новый файл.

Nikita Tiwari 13.04.2023 19:55

Не могли бы вы проверить и сообщить мне, как решить эту проблему?

Nikita Tiwari 13.04.2023 21:44
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку вы установили переменную для документа, который вы открыли, вы не должны использовать 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

Спасибо, это помогло мне решить проблему.

Nikita Tiwari 18.04.2023 23:33

Другие вопросы по теме