Существует ряд факторов, влияющих на этот код, которые могут или могут вызвать проблемы.
Причина ошибки заключается в том, что этот код работает в Excel, поэтому, если objWord
не используется дляСинтаксис Word, и Word и Excel используют одно и то же имя для объекта, VBA попытается использовать объектную модель Excel.В этом случае, поскольку файл находится в Word, а не в Excel, использование objWord.Windows(Filename).Activate
должно избежать этой конкретной ошибки.
Другие соображения:
Как и в Excel, с использованием Active
, Activate
или Selection
в Word VBA ненадежен и не должен использоваться без крайней необходимости.Лучше работать с объектами приложения напрямую.Поэтому объявите и создайте экземпляр переменной для документа Word и используйте ее вместо ActiveDocument
:
Dim objDoc as Object 'Word.Document
Set objDoc = objWord.Documents.Open(strPath)
FileName = objDoc.Name
Неясно, нужно ли вам действительно активировать это окно.Это не обязательно для манипулирования содержимым документа через VBA.Если это для того, чтобы показать его пользователю, для редактирования, то непременно.Я мог бы подождать до конца кода, но это будет личное предпочтение ... В любом случае, можно обратиться к окнам документа, а не к VBA-поиску:
objDoc.Windows(1).Activate
Чтобы перенести отформатированный контент из одного места (Range
) в любом документе в другое место (Range
) в том же или другом документе, использование закладок может быть выполнено за один шаг без какого-либо выбора или активации:
objDoc.Bookmarks("Page1").Range.FormattedText = _
objWord.Documents("Template1").Bookmarks("Page1").Range.FormattedText