Я создавал Excel vba для поиска ключевого слова в текстовом документе, а затем возвращал строку над ним.Вот код:
Sub TEST()
Dim s As Word.Selection
fileaddress = "C:\XXXXXX"
Set appWrd = New Word.Application
Set docWrd = appWrd.Documents.Open(fileaddress)
Set aRange = docWrd.Range
Do
aRange.Find.Text = "keyword"
aRange.Find.Execute Forward:=True
If aRange.Find.Found Then
aRange.Select
Set s = Word.Selection
s.MoveUp Unit:=wdLine, COUNT:=1
MsgBox s.Paragraphs(1).Range.ListFormat.ListString
Set s = Nothing
End If
Loop While aRange.Find.Found
docWrd.Close
appWrd.Quit
End Sub
Код работает нормально в первый раз, затем во второй раз появляется ошибка 462.Я думаю, что проблема, вероятно, с этим Word.Selection вещь.Любая идея разветвляется?
PS: файл слова выглядит примерно так:
- Стиль заголовка 1
ключевое слово
1.1 Заголовокstyle 2
ключевое слово
Таким образом, код ищет ключевое слово, а затем перемещает курсор на одну строку вверх от местоположения ключевого слова, а затем msgbox возвращает «1» и «1.1».Однако, как я уже сказал, код работает отлично с первого раза.Я думаю, что это связано с тем, что определенный процесс не убит в диспетчере задач после предыдущего запуска Excel.
решено
Новый код:
Sub TEST()
Dim s As Word.Selection
fileaddress = "C:\XXXXXX"
Set appWrd = New Word.Application
Set docWrd = appWrd.Documents.Open(fileaddress)
Set aRange = docWrd.Range
Do
aRange.Find.Text = "keyword"
aRange.Find.Execute Forward:=True
If aRange.Find.Found Then
aRange.Select
Set s = appWrd.Selection '<------- This is the only change!
s.MoveUp Unit:=wdLine, COUNT:=1
MsgBox s.Paragraphs(1).Range.ListFormat.ListString
Set s = Nothing
End If
Loop While aRange.Find.Found
docWrd.Close
appWrd.Quit
End Sub