У меня есть требование ежедневно извлекать значение из текстового документа и записывать его в книгу Excel. В настоящее время я делаю это вручную, и это является границей относительно наиболее эффективного метода для меня
2 Используя слово перейдите к таблице «9. ЗАПАСЫ ... »(пример извлечения ниже - Приложение A) и прочитайте ежедневное использование дизельного топлива (букв), выделенное красным.
3. Запишите это значение в ячейку электронной таблицы.
Таблица показана ниже, из-за форматирования я не могу отправить вам точную таблицу, но я смогу отправить значения об этом.
9.STOCKS (По состоянию на 00:01 часов в день выпуска отчета). Фондовая проведено Ежедневное использование Минимальный запас
Дизель (л)
390436
15012
25000
Азот (мм)
35
1
19
Чемпион 1033 (тотал)
+15
1
4
Nexguard (Котлы)
4
0,25
4 х 200 литров
Приложение B: Беатрис Период отчета: 00:01 - 24:00 10 августа 2010 г.
Если у вас есть какие-либо сомнения относительно моего вопроса, пожалуйста, ответьте мне, я ценю ваши усилия и хочу заранее поблагодарить
вот код, использующий позднее связывание чем word.application и т. д.). Из Excel 2003 он
шаги 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. Насколько я знаю, это стандарт в Excel 2003, но лучше проверить, чем сбой.
И я не включил код для проверки того, действительно ли предметы найдены; Я оставляю это на ваше творчество.
Надеюсь, это поможет.