Word VBA用户窗体移动光标到文档末尾性能过慢,求快速实现方法
解决方案
最优方案(无Selection开销,耗时<0.01秒)
直接操作文档Range对象定位,完全规避Selection对象的额外开销:
把你原来的Selection.EndKey Unit:=wdStory, Extend:=wdMove整行替换为以下代码:
With ActiveDocument.Content .Collapse Direction:=wdCollapseEnd .Select End With
原理是ActiveDocument.Content直接获取整个文档的范围对象,Collapse wdCollapseEnd直接将范围折叠到末尾位置,不需要遍历文档内容,和手动按Ctrl+End速度一致。
备用方案(模拟手动按键)
如果需要完全复现手动按Ctrl+End的行为,可以用SendKeys实现,速度同样极快:
SendKeys "^{End}", True
注意第二个参数True表示等待按键执行完成后再运行后续代码,避免异步执行导致的定位错误。
额外优化建议
你当前的Farbe子程序依赖Selection移动光标,不仅额外耗时,还会打乱光标位置,可优化为直接操作书签字段,无需移动光标:
Sub Farbe(ByVal Feld As String, ByVal Sichtbar As Boolean) ' 先判断书签是否存在,避免报错 If Not ActiveDocument.Bookmarks.Exists(Feld) Then Exit Sub With ActiveDocument.Bookmarks(Feld).Range.Font If Sichtbar = True Then .Color = wdColorAutomatic Else .Color = -603914241 End If End With End Sub
优化后该子程序不会移动光标,总运行耗时还能进一步压缩。
内容的提问来源于stack exchange,提问作者Bughater
相关产品推荐
相关产品推荐

