欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  Office

Word中以VBA实现的自动翻页功能与文档结构图显示不同步

程序员文章站 2022-07-08 08:07:57
问题:我是VBA的初学者,手上有长Word文档需阅读,为强迫自己能够看完,欲实现自动翻页功能,用了以下两种方法: 方法一 Option Explici...

问题:我是VBA的初学者,手上有长Word文档需阅读,为强迫自己能够看完,欲实现自动翻页功能,用了以下两种方法:
方法一

  1. Option Explicit  Dim 结束翻页 As Boolean  
  2. Dim SSS As Integer   
  3. Sub stop()      结束翻页 = True  
  4. End Sub   
  5. Sub start()    SSS = Timer 
  6.   结束翻页 = false    Do  
  7.     If 结束翻页=true Then Exit Do      If Timer >= SSS + 5 Then  
  8.         Application.Browser.Next          SSS = Timer 
  9.         End If          DoEvents  
  10.   Loop  End Sub 
  11.  ========方法二  
  12. Option Explicit  Dim 结束翻页 As Boolean  
  13.  Sub stop()  
  14.     结束翻页 = True  End Sub  
  15.  Sub start()  
  16.   结束翻页 = False    Application.OnTime Now + TimeValue("00:00:05"), "do_it"  
  17. End Sub   
  18. Sub do_it()    If 结束翻页 = False Then  
  19.   Application.Browser.Next    start  
  20.   End If  End Sub 

两种方法均可实现翻页的功能,但第一种方法用起来太夸张,CPU总是100%;第二种方法比较理想,绝对的轻松。
然而问题是,我的Word文档都设有九级目录,看书的时候习惯于将正文与文档结构图对照着看,以理清自己的思路。在快速速读的时候,这个功能就更有作用。
第一种方法,随着自动翻页,文档结构图中的各级目录也会跟着跳转,书翻到哪里,目录的反蓝显示也就跳到哪里。
第二种方法,却无法实现这个功能,目录的反蓝显示永远只在初始的位置。除非书自动翻页以后,在页面中用鼠标点一下,反蓝的目录才会跳转。
这个问题我想是出在使用时间控件的时候,闪烁的光标的性质和正常的光标插入点的性质有点不一样,在翻页后用了插入“”的语句也不行。
请各位前辈帮助解决文档结构图中目录反蓝显示随自动翻页跳转的问题。

解答:
可以试下:

  1. Option Explicit  Dim myByte As Byte  
  2. Sub myStart()      If Selection.Paragraphs(1).Range.IsEqual(ActiveDocument.Content.Paragraphs.Last.Range) = True Then  
  3.         myByte = 100     Else  
  4.         myByte = 10     End If  
  5.     Application.OnTime Now + TimeValue("00:00:05"), "Do_it"      Application.ScreenUpdating = False 
  6.     ActiveDocument.ActiveWindow.DocumentMap = False     ActiveDocument.ActiveWindow.DocumentMap = True 
  7.     Application.ScreenUpdating = True End Sub  
  8. Sub Do_it()      If myByte = 0 Then  
  9.         Selection.HomeKey wdStory          myStart  
  10.     ElseIf myByte = 10 Then          Selection.MoveDown Unit:=wdScreen, Count:=1 
  11.         myStart      Else  
  12.         myByte = 0     End If  
  13. End Sub  Sub myStop()