【发布时间】:2019-03-29 03:18:18
【问题描述】:
我正在创建一个 Excel vba 来搜索 word 文档中的关键字,然后返回上面的行。代码如下:
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:word文件是这样的:
- 标题样式1
关键字
1.1 标题样式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
【问题讨论】:
-
如果您在 Word VBA 中运行它而不创建任何 Word.Application 对象,您是否获得了预期的结果?
-
我在 Word VBA 中使用了下面的代码,它工作正常。
Sub TEST()Set aRange = ActiveDocument.RangeDoaRange.Find.Text = "keyword"aRange.Find.Execute Forward:=TrueIf aRange.Find.Found ThenaRange.SelectSelection.MoveUp Unit:=wdLine, Count:=1sectionNum = Selection.Paragraphs(1).Range.ListFormat.ListStringMsgBox sectionNumEnd If@9876