我的测试场景: 我在大纲视图中。 我已经将书签中的范围加载到变量中。 我想实际做到以下几点:
dim StartRange as range, nowLevel as integer, startLevel as integer
set StartRange = Selection.range
nowLevel = StartRange.Paragraphs(1).OutlineLevel
Do
StartRange.GoTo What:=wdGoToHeading, Which:=wdGoToPrevious, Count:=1
nowLevel = StartRange.Paragraphs(1).OutlineLevel
If nowLevel < startlevel Then ActiveWindow.View.ExpandOutline
Loop Until nowLevel = 1
我已手动调试代码并使用Startrange.select检查范围对象的位置。
事实证明它根本不动。
我已经单独进行了测试,我的印象是Range.goto根本不起作用,因为它从不在任何地方移动。 (虽然使用Selection.goto做同样的事情确实会移动......)
我错过了什么?
修改
我在上面的代码片段中添加了更多详细信息;这应该是为任何人运行测试,但是对于我来说,对于任何随机范围的问题都是GENERAL(当在Outline视图上时,AllLevelsVisible或Collapsed):“StartRange.GoTo What:=wdGoHeading, Which:=wdGoToPrevious, Count:=1
”
我现在实际上已经解决了我原来的问题,使用选择而不是范围,但是稍后会知道range.goto有什么问题。
我的另一个解决方法是:Word | VBA - How to start Word in Outline view - opened exactly where you left off?
答案 0 :(得分:1)
在您的代码中,您使用StartRange.GoTo
,但下一行再次使用StartRange
,它只取原始值。
也许:
Set newRange = StartRange.GoTo(What:=wdGoHeading, Which:=wdGoToPrevious, Count:=1)
nowLevel = newRange.Paragraphs(1).OutlineLevel
根据您的要求,以下内容可能更适用:
Set StartRange = StartRange.GoTo(What:=wdGoHeading, Which:=wdGoToPrevious, Count:=1)
nowLevel = StartRange.Paragraphs(1).OutlineLevel
编辑:基于评论中的问题的其他信息。
某些范围方法(例如MoveStart
和Expand
)可用于主动修改范围参数。 GoTo
方法是一个返回Range
对象的函数,而不是修改引用对象的活动。但是,MSDN文档对后一部分并不清楚,并暗示使用GoTo
方法会移动范围。 GoTo
会移动插入点,但这与移动Range
不同。
Soapbox:我对新的MSDN内容不满意 - 它现在很乏味,只提供基本描述。旧的深入信息(包括限制,边缘情况和潜在的错误因素)正在被删除 - 可能被某些人视为改进。