#excel #vba
Вопрос:
Извините, если это очевидный вопрос, но у меня проблема с некоторым кодом VBA, который пытается импортировать некоторые данные из файла Word в электронную таблицу Excel. В документах Word есть несколько основных таблиц, которые хороши, но одна из них также находится в текстовом поле. Я могу заставить импорт работать в этом случае, но только в том случае, если файл word уже открыт. Я не совсем понимаю, почему это так.
Если это помогает, ошибка: Ошибка во время выполнения, ошибка автоматизации, Неопределенная ошибка.
wdFileName = Application.GetOpenFilename("Word files (*.doc*),*.doc*", , _
"Browse for file containing table to be imported")
If wdFileName = False Then Exit Sub '(user cancelled import file browser)
Set wdDoc = GetObject(wdFileName) 'open Word file
excelRow = Range("A" amp; Rows.Count).End(xlUp).Row 1 ' find next blank row in excel spreadsheet based on column A
With wdDoc
TableNo = wdDoc.Tables.Count 'find total number of tables in the document
'This is the line that triggers the error if the word document is not already open, there are 7 shapes in the document for reference.
shpTableCount = .Shapes(4).TextFrame.TextRange.Tables.Count
Спасибо за любую помощь, которую вы можете оказать.
Ответ №1:
GetOpenFilename
указывает только имя файла GetObject
, выбирает только экземпляр Word этого файла, если он уже открыт. Если он закрыт (означает, что вы получаете сообщение об GetObject(wdFileName)
ошибке, вам нужно открыть его с помощью
Set wdDoc = Documents.Open(wdFileName)
Так что вы можете сделать
'check if it is already open
On Error Resume Next 'hide all error messages
Set wdDoc = GetObject(wdFileName)
On Error Goto 0 're-enable error messages
'if it is not open, then open it
If wdDoc Is Nothing Then
Set wdDoc = Documents.Open(wdFileName)
End If
Комментарии:
1. Привет, спасибо. Поэтому я попытался заменить исходную строку Set wdDoc = GetObject(wdFileName) в этом разделе и получить ту же ошибку, предположительно, потому что строка Set wdDoc = GetObject(wdFileName) означает, что wdDoc-это не что иное, и поэтому она не входит в оператор If? Если я просто использую набор wdDoc = Документы. Откройте код(wdFileName), он работает — нужно ли мне убедиться, что я также закрою документ в конце вложенного файла?
2. Вам всегда нужно закрыть свой документ, если вы хотите открыть его с
Documents.Open
помощью . Если вы не закроете ее, она останется открытой.3. Ах, извините, я имел в виду, что в конце кода vba мне было интересно, нужно ли мне использовать что-то другое, открыв документ, но небольшое исследование показывает, что я все равно должен быть в порядке с Set wdDoc = Ничего.
4. Да, но вы должны закрыть документ,
wdDoc.Close
прежде чем выSet wdDoc = Nothing