вот некоторый код, использующий позднюю привязку (объявлять объекты, а не word.application и т. Д.). Из Excel 2003 , это
- открывает документ WORD
- ищет строку "минимальный запас"
- перемещает курсор на несколько строк / слов дальше
- расширяет / выбирает курсор WORD
- вставляет это слово в EXCEL
шаги 2-5 повторяются для «Периода отчета:» (обратите внимание, что «:» является границей слова, поэтому нам нужно перейти на 8 слов вправо, чтобы прийти к дате)
Для WORD я скопировал текст из вашего Q, как есть (без таблицы, просто текст). Если вместо этого вы используете таблицы, вам может понадобиться поиграть с единицами различных операторов Move
(например, для ячеек unit:=12
); стратегия остается прежней: найти постоянный текст, переместить курсор к конечному пункту назначения, расширить выделение, создать диапазон слов и передать.
Оба элемента помещаются в текущую ячейку в Excel и ее правого соседа.
Sub GrabUsage()
Dim FName As String, FD As FileDialog
Dim WApp As Object, WDoc As Object, WDR As Object
Dim ExR As Range
Set ExR = Selection ' current location in Excel Sheet
'let's select the WORD doc
Set FD = Application.FileDialog(msoFileDialogOpen)
FD.Show
If FD.SelectedItems.Count <> 0 Then
FName = FD.SelectedItems(1)
Else
Exit Sub
End If
' open Word application and load doc
Set WApp = CreateObject("Word.Application")
' WApp.Visible = True
Set WDoc = WApp.Documents.Open(FName)
' go home and search
WApp.Selection.HomeKey Unit:=6
WApp.Selection.Find.ClearFormatting
WApp.Selection.Find.Execute "Minimum Stock"
' move cursor from find to final data item
WApp.Selection.MoveDown Unit:=5, Count:=1
WApp.Selection.MoveRight Unit:=2, Count:=2
' the miracle happens here
WApp.Selection.MoveRight Unit:=2, Count:=1, Extend:=1
' grab and put into excel
Set WDR = WApp.Selection
ExR(1, 1) = WDR ' place at Excel cursor
'repeat
WApp.Selection.HomeKey Unit:=6
WApp.Selection.Find.ClearFormatting
WApp.Selection.Find.Execute "Period of Report:"
WApp.Selection.MoveRight Unit:=2, Count:=8
WApp.Selection.MoveRight Unit:=2, Count:=3, Extend:=1
Set WDR = WApp.Selection
ExR(1, 2) = WDR ' place in cell right of Excel cursor
WDoc.Close
WApp.Quit
End Sub
Вы можете создать кнопку и вызвать этот сабвуфер оттуда или связать GrabUsage () с функциональной клавишей.
Я прокомментировал WApp.Visible = True
, потому что в процессе производства вы не хотите, чтобы WORD даже появлялся, но он вам понадобится для отладки и воспроизведения движений курсора.
Недостатком позднего связывания (а не использования ссылок на библиотеку Word) является жесткое кодирование единиц (6 = история, 5 = строка, 2 = слово) вместо использования перечислений Word, но я иногда получаю сбои ОС при раннем связывание .... не очень сексуально, но, кажется, работает.
Для объекта FileDialog требуется ссылка на библиотеку MS Office Office. AFAIK это стандартно в Excel 2003, но лучше проверить, чем вылетать.
И я не включил код, чтобы проверить, действительно ли найдены предметы; Я оставляю это вашему творчеству.
Надеюсь, это поможет.