Letysite.ru

IT Новости с интернет пространства
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Vba открыть файл word

10.4.2 Свойства и методы коллекции Documents

Коллекция Word.Documents, методы Add(), Open(), Item(), программное создание и открытие документов Word в VBA

Коллекция Documents, как уже говорилось, представляет все документы Word, открытые в настоящий момент. Начинается нумерация документов в коллекции с 1. Из свойств этой коллекции интерес может представлять только свойство Count — количество открытых документов. Гораздо важнее методы этой коллекции. Про некоторые из них мы уже говорили в предыдущем разделе, но здесь для справки при приведем информацию о них еще раз:

  • Add() — этот метод позволяет создать и сразу же открыть новый документ (и вернуть ссылку на его объект). Это — наиболее распространенный способ создания новых документов в Word. Полный синтаксис этого метода выглядит как

Add(Template, NewTemplate, DocumentType, Visible)

Template — это шаблон для создания нового документа, NewTemplate (true/false ) — делать ли новый документ шаблоном, DocumentType — варианты: wdNewBlankDocument , wdNewEmailMessage, wdNewFrameset или wdNewWebPage (по умолчанию — новый чистый документ ), Visible — будет ли новый документ видимым (по умолчанию ) или невидимым .

  • Open() — этот еще один важнейший метод коллекции Documents позволяет открыть документ с диска и добавить его в коллекцию. Этот метод принимает множество параметров, из которых обязательным является только один — имя документа (вместе с путем к нему). Самый простой вариант применения этого метода выглядит так:

Dim oDoc1 As Document

Set oDoc1 = Documents.Open(«c:doc1.doc»)

  • метод Item() позволяет найти нужный документ в коллекции по его индексу. Но обычно для получения ссылки на нужный документ используется конструкция For..Next с проверкой значения какого-либо свойства документа через If. Чаще всего это свойство — Name:

Dim oDoc1 As Document

For i = 1 To Documents.Count

Set oDoc1 = Documents.Item(i)

If oDoc1.Name = «doc1.doc» Then

Set oDoc1 = Nothing

Эта конструкция возвращает ссылку в виде переменной oDoc1 на документ doc1.doc, если он точно есть в коллекции. Если его нет, то во избежание ошибок нужно реализовывать дополнительные проверки. На практике можно было бы подумать, не нужно ли вам перед сравнением привести имя документа doc1.doc в нижний регистр — если учитывать регистр букв при поиске вам не нужно.

Через свойство Item можно получить доступ к объекту документа напрямую. Например, в этом примере мы получаем имя первого документа в коллекции Documents:

  • методы Save() и Close() — позволяют сохранить и закрыть все документы в коллекции соответственно.
  • методы CanCheckOut() (можно ли «забрать» документ в монопольный доступ) и CheckOut() (забрать документ в монопольный доступ) можно применять, если документ находится в документной библиотеке в базе данных SharePoint Portal Server.

Работа с Word — Создание, открытие, форматирование, закрытие и сохранение

Использование Word в приложениях на Visual Basic 6 открывает широчайшие возможности для создания профессионально оформленных документов (например отчетов). Это часто необходимо при работе в фирме или на предприятии для обеспечения документооборота. Основным преимуществом использования Wordа в этом случае является то, что практически на всех компьютерах, используемых в фирмах и на предприятиях установлены Windows и пакет Microsoft Office. Поэтому подготовленные документы Word не требуют каких-либо дополнительных усилий для их просмотра, печати и редактирования. Единственное что нужно помнить, это то что работа через автоматизацию OLE (связывание и внедрение объектов) на деле оказывается довольно медленной технологией, хотя и очень полезной.

Чтобы использовать объекты Word в Visual Basic , необходимо инсталлировать сам Word. После этого вы получаете в своё распоряжение библиотеку Microsoft Word Object Library, которую нужно подключить к текущему проекту через диалоговое окно «Разработать»>>»Ссылки» (References) и указать Microsoft Word 9.0 Object Library (для Word 2000).

Два самых важных объекта Word это Word.Application и Word.Document. Они обеспечивают доступ к экземпляру приложения и документам Word.

Поэтому в раздел Generals «Общее» формы введите следующий код для объявления объектных переменных приложения Word и документа Word.

Чтобы создать новый экземпляр Word, введите такой код кнопки;

Для форматирования печатной области документа используйте данный код:

(вообще-то Word использует для всех размеров своих элементов пункты, поэтому для использования других единиц измерения, необходимо использовать встроенные функции форматирования.)

  • CentimetersToPoints(Х.ХХ) — переводит сантиметры в пункты.
  • MillimetersToPoints(X.XX) — переводит миллиметры в пункты

Для того чтобы в своём приложении не писать постоянно одно и тоже имя объекта, можно использовать оператор With.

Например код находящейся выше можно переписать так:

Если вам необходимо создать документ Word с нестандартным размером листа, то используйте данный код:

Данный код меняет ориентацию страницы (практически меняет местами значения ширины и высоты листа):

  • wdOrientLandscape — альбомная ориентация ( число 1)
  • wdOrientPortrait — книжная ориентация ( число 0)

Для сохранения документа под новым именем и в определенное место используйте данный код код:

После такого сохранения вы можете про ходу работы с документом сохранять его.

Или проверить, были ли сохранены внесенные изменения свойством Saved и если изменения не были сохранены — сохранить их;

Завершив работу с документом, вы можете закрыть сам документ методом Close и сам Word методом Quit.

Если в методах Close и Quit не использовать необязательный параметр True то Word запросит согласие пользователя (если документ не был перед этим сохранён) на закрытие документа.

Если вам необходимо оставить Word открытым, просто не используйте методы Close и Quit.

Если вам необходимо поставить пароль на документ, то используйте код:

Конференция VBStreets

Весь вкус программирования!

  • Список форумовСмежные технологииVBA
  • Изменить размер шрифта
  • FAQ
  • Вход

Работа с файлами Excell и Word через VBA

Работа с файлами Excell и Word через VBA

Bagathur » 10.08.2006 (Чт) 12:46

Дано: В формате Excell есть список, содержащий номера, фамилии, даты и прочую информацию. В формате Word есть «рыбы» документов.
Требуется: немного обработав данные из Excell , заменить автозаменой условных значения из «рыбы» на нужные значения списка (например, «дата№1» в рыбе на «21.08.2006») и сохранить изменённые «рыбы» под новыми именами в новой папке.
Проблема в том, что не могу заставить написанные в Экселе макросы открывать файлы Ворда и работать с ними, равно как и наоборот. Не получается занести все требуемые к изменению данные в переменные и заставить макросы Ворда воспринимать их. Код Ворда для открытия файлов Эксель не воспринимает — просит какой-то объект.
Смотрел во многих местах, но путного ответа не увидел — лишь какие-то безумно-сложные для ламера слова типа ShellExecute и тп.

Читать еще:  Wordpress iis сжатие включить

GSerg » 10.08.2006 (Чт) 13:30

Bagathur » 10.08.2006 (Чт) 13:49

Viper » 10.08.2006 (Чт) 14:00

Bagathur » 10.08.2006 (Чт) 14:32

GSerg » 10.08.2006 (Чт) 14:34

Bagathur » 10.08.2006 (Чт) 16:01

GSerg » 10.08.2006 (Чт) 16:05

Там лежит, там, всё правильно.

Хотя наверное да, лучше руками. Но задача какая-то уж больно извращённая. не опишешь в неабстрактных терминах?

Bagathur » 10.08.2006 (Чт) 17:11

Уже Вордов штук 20 облазил в поисках этого мифического «слияния» — везде есть только мастер, и то в панели инструментов, не в подокне «сервис»)

Если говорить в неабстрактых терминах — есть штук 30 различных типов документов (договора, акты, соглашения, приложения, счета, счета-фактуры, платёжные поручения, медиа-планы, заявки, заказы и т.п., некоторых по 10 разных подтипов). Текст, форма и форматирование каждого документа — один в один, различаются только даты, суммы, реквизиты, номера, фамилии бухгалтеров и генеральных директоров и т.п.

Таких документов в месяц приходится делать примерно на 1500 страниц. До меня (я пришёл с армии 2 недели назад, работаю и того меньше) всё это делала банда девушек вручную — открывали документ за прошлый месяц и ручками правила все цифирки-буковки.

Я хочу сделать рыбу каждого документа, вводить в экселевский файл т.н. «список автозамены», потом жать волшебную кнопочку в юзер-форме и сразу формировать пакет документов на одну или несколько фирм.

Проблема осложняется тем, что необходимо немного обрабатывать данные автозамены — например, где-то требуется написать «Иванов Иван Иванович», где-то — «Иванов И.И.» или даже «И.И.Иванов»; где-то надо просто 1000.00р, где-то — тысяча рублей 00 копеек, плюс ещё 2 варианта числового-текстового написания суммы; ну и перевод месяцев из чисел в текст и обратно.

Хотелось бы сделать логическую подпрограммку для замены числа «объекта» и правильного склонения по падежам (например, чтобы заменяло в «рыбе» «медиа-план» на «медиа-планы» автоматом, если их в поле ввода указано больше одного).

Так же было бы неплохо сделать так, чтобы распечатывать наклёпанные документы с задаваемым пользователем количеством копий одним касанием кнопки, а не открывать каждый по отдельности.

И ещё, возможно, ведение базы данных какой тип документа на какую фирму с какими «параметрами замены» создан, кем и когда, отправлен или нет.

Смысл подобного — должно стать больше порядка в делах, ну и плюс то что я за 1-2 дня буду делать то, над чем 7 девушек трудилось по 3 недели.

П.С. По образованию я — не то что не техник или программист, даже не гуманитарий), ничего кроме ВБА не знаю, да и его-то тоже не ахти. Но кроме него больше надежды ни на что нет. Туплю и ламерю так, что иногда самому страшно становится.

alibek » 11.08.2006 (Пт) 7:49

Bagathur » 11.08.2006 (Пт) 9:16

Да я по всякому уже мучил мастер слияний — ну не хватает у него возможностей, и всё тут — слишком много переменных в слишком многих файлах требуется менять. Плюс хотелось бы иметь возможность менять всё что угодно по парному списку (что заменить — на что заменить) для любого, пусть даже в 1ый раз видимого файла, и хранить в .txt файле список сделанных замен на всякий случай. Да и не хотелось бы лимитировать количество возможных автозамен — мало ли что там ещё потом будет.

Ночью помучал людей, они подсказали два варианта решения проблемы открытия Вордовских файлов из Экселя:
Код: Выделить всё
Dim WordApp As New Word.Application
Dim WordDoc As Word.Document
Dim CType As String, CFile As String

Dim dirpath As String
Dim kname As String
Dim par1 As String
Dim par2 As String

par1 = ActiveWorkbook.Sheets(«Ñïèñîê çàìåíû»).Cells(5, 2).Value
par2 = ActiveWorkbook.Sheets(«Ñïèñîê çàìåíû»).Cells(5, 3).Value
dirpath = ActiveWorkbook.Sheets(«Ñïèñîê çàìåíû»).Cells(63, 2).Value
fname1 = ActiveWorkbook.Sheets(«Ñïèñîê çàìåíû»).Cells(64, 2).Value

With WordApp
.Visible = True
.WindowState = wdWindowStateMaximize
CFile = dirpath & «» & fname1 & «.doc»
Set WordDoc = .Documents.Open(CFile)
End With

WordDoc.Activate
With WordApp.ActiveDocument.Content.Find
.Text = par1
.Replacement.Text = par2
.Execute Replace:=wdReplaceAll
End With

Только надо подключить в проект Экселя библиотеки Ворда и АктивХ.

2ой вариант ещё проще и изящней — используя функцию OLEOpen, но т.к. я даже примерно не знаю что такое эта OLE, то использую указанный выше, хотя он и длиннее.
Для перевода суммы в пропись скачал надстройку для экселя, добавляющего функцию «СуммаПрописью», так что тут проблем вроде нет.

Следующая стоящая на очереди проблема — создания подобия браузера для жесткого диска, работающего из того же модуля, что и всё остальное. Говоря конкретней:
Есть папка на HDD, содержащая другие файлы и подпапки.
Требуется: пользователь ТОЛЬКО мышкой задаёт путь к папке по дереву (не вводя путь с клавиатуры, дабы не напутал ничего), далее ставит переключатель на количество копий и из указанного каталога распечатываются все файлы (в том числе и из подпапок) с расширениями .doc и .xls указанное количество раз.
Пробовал делать через Dir, заполняя лист-бокс с именами папок программно, но меня убеждают, что есть встроенный в ВБА браузер, да и проблемы с подпапками возникают.

Подскажите плиз что-нибудь путное.

Bagathur » 12.08.2006 (Сб) 14:49

Код: Выделить всё Sub Кнопка1_Щелкнуть()
Dim She As Variant
Set She = GetObject(«path-filename.doc»)
She.OLEOpen ActiveSheet.Cells(2, 1), ActiveSheet.Cells(2, 2)
‘See.ActiveDocument.Save
End Sub

Function OLEOpen(par1 As String, par2 As String)
Content.Find.Execute FindText:=par1, ReplaceWith:=par2, Replace:=wdReplaceAll
End Function

вот такой ещё вариант с ОЛЕ

Bagathur » 14.08.2006 (Пн) 16:26

GSerg » 14.08.2006 (Пн) 19:59

Bagathur » 15.08.2006 (Вт) 5:51

Угу, нашёл уже)
Код: Выделить всё sFilename = Application.GetOpenFilename(«All files (*.*), *.*»)
‘ To Exit if Cancel was pressed
If sFilename = False Then Exit Sub

‘ — alternatively — can use

With Application.Dialogs(xlDialogOpen)
.Show
End With

Вообще много что есть на этом буржуйском сайте — http://www.vba-programmer.com если не знаете ещё.

Bagathur » 15.08.2006 (Вт) 7:01

Получается вот такая фигня в теле ЮзерФормы:
Код: Выделить всё Dim startdir As String
Private Sub HDD1_Click() ‘переключатель для выбора локальных дисков
startdir = «e:» ‘ replace with starting directory
Call Список_каталогов
End Sub

Private Sub Список_каталогов()
Dim aryFoundDirectories() As String
Директории.AddItem Application.DefaultFilePath

On Error GoTo NEXT_STEP
‘ find all directories and subdirs from a starting point
current = 0
dircount = 0
currentdir = startdir
While current «»
If subdirect <> «.» And subdirect <> «..» Then
If (GetAttr(currentdir & subdirect) And vbDirectory) = vbDirectory Then
dircount = dircount + 1
ReDim Preserve aryFoundDirectories(dircount)
aryFoundDirectories(dircount) = currentdir & subdirect & «»
End If
End If
subdirect = Dir
Wend
current = current + 1
currentdir = aryFoundDirectories(current)
Wend
dircount = dircount + 1
ReDim Preserve aryFoundDirectories(dircount)
aryFoundDirectories(dircount) = startdir
NEXT_STEP:
Браузер.Директории.Clear
For i = 1 To UBound(aryFoundDirectories())
Браузер.Директории.AddItem aryFoundDirectories(i) ‘комбо-бокс для имён каталогов
Next
End Sub

Читать еще:  Password does not meet minimum requirements

Private Sub Директории_Change() ‘Имена файлов
Dim FileArray() As String, ffile As String, Count As Integer
Count = 0
ffile = Dir(Директории.Text, vbDirectory)
ReDim FileArray(Count)
FileArray(Count) = LCase(ffile)
Count = 1
Do While ffile <> «»
ffile = Dir()
If ffile <> «.» And ffile <> «. .» Then
ReDim Preserve FileArray(Count)
FileArray(Count) = LCase(ffile)
Count = Count + 1
End If
Loop
Браузер.Файлы.Clear
For i = LBound(FileArray()) To UBound(FileArray())
Браузер.Файлы.AddItem FileArray(i) ‘список для имён файлов
Next
End Sub

Если где-то получилось слишком тупо и можно заставить работать быстрее-лучше-правильней — подскажите плиз

Bagathur » 15.08.2006 (Вт) 7:51

Доступ к документам Word с помощью VBA

Доступ к документам Word с помощью VBA

Если написанная вами VBA-процедура функционирует прямо в документе, вы должны указать объект этого документа непосредственно в коде, Часто вы сможете сделать это неявным образом, используя объект Selection, о котором я расскажу дальше в настоящей главе. Однако в остальных ситуациях вам придется явно идентифицировать целевой объект.

Работа с активным документом

Типичная VBA-процедура в Word выполняет все свои магические действия в том документе, который в данный момент открыт для редактирования. Для указания активного документа используется объект ActiveDocument. Например, приведенная выше инструкция просто закрывает активный документ:

Как видите, вам не нужно писать код для определения того, какой же документ редактируется в данный момент: достаточно просто использовать объект ActiveDocument.

Если вам необходимо работать с определенным документом, который сейчас не активен, вы должны указать его как члена коллекции Documents, состоящей изо всех документов, открытых в настоящее время в Word. Как и в случае с любой другой коллекцией объектов в VBA, вы можете обратиться к отдельному документу в коллекции, используя его заголовок, который в данном случае совпадает с именем файла (только именем файла, а не с полным путем к нему). Вот соответствующий пример;

Documents(«Toy Store News letter.doc»)

Поскольку вы не знаете точно имя файла целевого документа заранее, а пользователь может в любой момент его изменить, вам следует создать переменную, которая будет содержать имя файла. После этого вы можете использовать эту переменную для указания объекта документа, например, так: Documents (strDocName).

Вы также можете обратиться к документу по его индексному номеру. Следующая инструкция, например, обращается к третьему документу в коллекции Documents:

Несмотря на всю простоту, этот метод достаточно ограничен, поскольку вы редко когда знаете индексный номер документа, с которым хотите работать. При этом вам стоит узнать имя открытого документа. Например, следующая инструкция присваивает переменной имя файла второго открытого документа:

Для создания нового документа используйте метод Add коллекции объектов Documents. Используемый без каких-либо документов, метод Add создает новый документ, базирующийся на шаблоне Normal (Обычный). Для указания другого шаблона укажите путь к нему в качестве аргумента, как показано ниже:

Documents.Add template:= _

«C:WindowsApplication DataXMicrosoftHidden templates»

Для открытия существующего документа используйте метод Open коллекции объектов Documents. Конечно же, вам необходимо указать полный путь к документу, как показано ниже:

Documents.Open FileName:= _

«С:ToysToys for infants.doc»

Для активизации уже открытого документа используйте метод Activate коллекции объектов Documents. Предположим, что вам необходимо, чтобы ваша VBA-программа активизировала определенный документ, который в момент запуска программы может быть и открыт, и закрыт. Используйте код, подобный показанному ниже, для активизации открытого документа или открытия документа, если он еще не открыт:

Dim docFileName As String, docPath as String

docFileName = «Старые игрушки.doc»

For Each target Doc In Documents

If targetDoc.Name = docFileName Then

If targetDocIsOpen = True Then

Documents.Open FileName := docPath & docFileName

Поскольку каждый документ Word состоит из одного или нескольких разделов, вы можете ожидать, что Word VBA содержит коллекцию Sections и отдельные объекты Section для работы с этими элементами. Так оно и есть. Наиболее важное применение объектов Section — организация доступа к верхним и нижним колонтитулам (через объект Header Footer ). Вы можете добавлять новые разделы в документ, используя метод Add коллекции Sections или метод Insert Break объекта Range или Selection.

Похожие главы из других книг:

Доступ к WMI с помощью сервера сценариев

Доступ к WMI с помощью сервера сценариев Полное понимание WMI невозможно без знания тех возможностей, которые она предоставляет администратору. Поэтому рассмотрим сейчас некоторые примеры написания сценариев сервера сценариев Windows с использованием возможностей WMI. Раздел

Доступ к базе данных с помощью ASP.NET

Доступ к базе данных с помощью ASP.NET Ядром любого приложения баз данных является база данных. Для использования базы данных необходимо иметь надежный и безопасный способ подключения. На платформе .NET этот способ реализуется с помощью пространства имен System.Data и одной

Доступ к объектам с помощью Web-служб

Доступ к объектам с помощью Web-служб Итак, мы приступаем к работе на совершенно новом уровне, т.е. с использованием Web-служб. С самого начала Web-среда рассматривалась как способ передачи данных между двумя точками. Именно эта исходная концепция способствовала развитию и

Поиск и замена текста с помощью VBA в Word

Поиск и замена текста с помощью VBA в Word Хотя это звучит и несколько необычно, но Find — это объект Word VBA. Объекты Find принадлежат диапазонам и выделенным областям. Для обнаружения или форматирования текста с помощью объекта Find вам потребуется выполнить следующие действия.1.

8.2. Публикация записей в блоге с помощью Word

8.2. Публикация записей в блоге с помощью Word Нововведением Word 2007 является возможность опубликовывать записи в блоги непосредственно из окна программы. Это очень удобно, поскольку Word имеет гораздо больше возможностей по набору и форматированию текста, чем текстовые

18.2.1. Склонность к большим документам

18.2.1. Склонность к большим документам Средства подготовки документов в Unix всегда были предназначены, главным образом, для разрешения трудностей, связанных с компоновкой крупных и сложных документов. Первоначально такими документами были патентные заявки и техническая

18.2.1. Склонность к большим документам

18.2.1. Склонность к большим документам Средства подготовки документов в Unix всегда были предназначены, главным образом, для разрешения трудностей, связанных с компоновкой крупных и сложных документов. Первоначально такими документами были патентные заявки и техническая

Читать еще:  Интерфейс word 2020

ГЛАВА 22. Доступ к базам данных с помощью ADO.NET

ГЛАВА 22. Доступ к базам данных с помощью ADO.NET Если вы не являетесь профессиональным разработчиком видеоигр, вас, наверное, заинтересует тема доступа к базам данных. Как и следует ожидать, платформа .NET определяет целый ряд пространств имен, обеспечивающих взаимодействие с

MICROSOFT WORD

MICROSOFT WORD . Я люблю – и значит, я живу, – это из Высоцкого . Я пишу – и значит, я работаю в Word, – это уже из нашей повседневной реальности. Наверное, нет в мире другой столь популярной программы, как текстовый редактор Word (исключая разве что Windows, хотя Word превосходно себя

Word Utilities

Word Utilities (http://wordutilities.chat.ru/)Эта небольшая, всего 0,3 Мб, программка поможет тем, кто никак не может привыкнуть к переключению языка набора или ставит множество пробелов между словами.? Word Utilities оптимизирует размер межсловных пробелов.? Разберется с короткими строками абзацев.?

MS Word

MS Word Создание и разметка документаСовременную жизнь нельзя представить без обилия текстовых документов в бумажном и электронном виде.Microsoft Word – один из лучших текстовых редакторов. Он позволяет создавать и редактировать документы, добавлять в них таблицы и рисунки,

2. ТРЕБОВАНИЯ К ПРОГРАММНЫМ ДОКУМЕНТАМ, СОДЕРЖАЩИМ В ОСНОВНОМ СПЛОШНОЙ ТЕКСТ

2. ТРЕБОВАНИЯ К ПРОГРАММНЫМ ДОКУМЕНТАМ, СОДЕРЖАЩИМ В ОСНОВНОМ СПЛОШНОЙ ТЕКСТ 2.1. Построение документа 2.1.1. При необходимости допускается делить документ на части. Деление на части осуществляется на уровне не ниже раздела. Каждую часть комплектуют отдельно. Всем частям

3. ТРЕБОВАНИЯ К ПРОГРАММНЫМ ДОКУМЕНТАМ. СОДЕРЖАЩИМ ТЕКСТ, РАЗБИТЫЙ НА ГРАФЫ

3. ТРЕБОВАНИЯ К ПРОГРАММНЫМ ДОКУМЕНТАМ. СОДЕРЖАЩИМ ТЕКСТ, РАЗБИТЫЙ НА ГРАФЫ 3.1. Программные документы, содержащие текст, разбитый на графы, при необходимости разделяют на разделы и подразделы, которые не нумеруют. Допускается линии, разграничивающие строки и графы, не

Word Программа Microsoft Word – очень мощный текстовый редактор. Она позволяет сделать с текстом все, что угодно (и не только с текстом). Думаю, что вы уже видели толстые и умные книги по изучению этой программы. Но, по всей вероятности, подавляющее большинство из них не содержит ее

Excel VBA to Open Multiple Word files in a loop

I apologize in advance for the newbie question — most of my VBA experience is in Excel, or Word to Excel. In this case, I am going from Excel to Word. I am trying to capture some data off of some Word forms and store it in an Excel file.

Right now, my code works for the first document in the folder, but after that, it hoses up with an automation error «the server threw an exception» (goo!)

Here is my code:

I notice that the code works fine if I quit the app and set the object = nothing within the loop. But the way it is now, it bombs-out on the second file in the folder on the «objWordApp.documents.Open strFilePath & strCurFileName» line.

Can I open and close Word documents in a loop without having to create the object over and over? It’s really slow when I do it that way.

Thanks for the help — I like your way much better. Unfortunately, I get the same result. The program dies the second time through the loop on the line that reads:

The error that I get is:

Run-time Error -2147417851 (80010105) Automation Error The server threw an exception.

I tried your code on regular word docs (not the ones I’m processing) and it worked fine. The docs I’m running have form fields and macros — not sure if that makes a difference. I have set the macro security in Word to both «low» and «very high» to make sure the other macros don’t interfere.

I just can’t figure it out why it works for the first doc and then not the next. I even cloned the first doc but it made no difference.

Still no luck, though. The only thing I can get to work is if I completely wipe the objects and re-create them every time I want to open a file.

I’m not sure why that works and why it won’t work the other way. If I have to go this route, I can — it just seems really slow and inefficient. Is this a bad idea?

Создан 06 май. 09 2009-05-06 19:59:41 Anonymous

What do you mean by «bombs-out»? any error message? – shahkalpesh 06 май. 09 2009-05-06 20:41:26

1 ответ

I changed the Dir to a FileSystemObject (go to ToolsReferences and add Microsoft Scripting Runtime) and I was able to successfully open multiple files. If you are having problems, please describe the error you see in the debugger. Also, if you need to recurse into subdirectories, you will need to refactor this.

EDIT: I’ve added some error handling and a little refactoring although there is quite a bit more refactoring that could be done.

There must be something special about the documents you are opening. You might try using different parameters for opening the documents, such as:

You may need to add Microsoft Word as a Reference, and if you do that then start using the Word constants (wdDoNotSaveChanges, etc.). Check out the help on Documents.Open and test different parameters.

Also, use the «Set Next Statement» from the Context Menu during debugging and maybe skip the first document and open the second document directly and see if there are issues.

EDIT: I’ve changed the code to close and reopen Word if you get the automation error you described. You may have to adjust the error numbers, or simply close Word on any error (If Err.Number <> 0 Then . ).

Again, something must be special about your documents (macros, protection, etc.) because this code works on the test cases I have tried. Have you tried manually opening the documents in Word in the same order as the script, updating information similar to your process script, and then closing the documents to see if Word does anything strange?

Closing the Word.Application won’t hurt anything, but it will obviously significantly slower.

Создан 06 май. 09 2009-05-06 20:56:49 Ryan

Ссылка на основную публикацию
Adblock
detector