Private Sub Command1_Click()
Dim wdapp As Word.Application
Dim wddoc As Word.Document
Set wdapp = New Word.Application
Set wddoc = wdapp.Documents.Open(App.Path & "\f.doc")
Dim filepage As String
filepage = CStr(wddoc.BuiltinDocumentProperties(wdPropertyPages) - 3)
MsgBox filepage
wddoc.Close
wdapp.Quit
Set wddoc = Nothing
Set wdapp = Nothing
End Sub
f.doc是一个8页的文档,其中第一节3页是封面、说明,第二节正文部分为5页,我要在“说明”部分中显示正文页数,上面程序有错吗?为什么运行时显示0,可逐语句调试,却能显示正确的数值:5
刚刚试过,在我的机子上(赛扬2.4G,winxp,vb6,office2000)最少700ms,在别的机子上呢?
只在本句之前延时:filepage = CStr(wddoc.BuiltInDocumentProperties(wdPropertyPages) - 3)
Private Sub Command1_Click()
Dim wdapp As Word.Application
Dim wddoc As Word.Document
Set wdapp = New Word.Application
Set wddoc = wdapp.Documents.Open(App.Path & "\f.doc")
Dim filepage As String
do while wddoc.BuiltinDocumentProperties(wdPropertyPages)=0 '这个判断条件如果不行,你自己再改改
doevents
loop
filepage = CStr(wddoc.BuiltinDocumentProperties(wdPropertyPages) - 3)
MsgBox filepage
wddoc.Close
wdapp.Quit
Set wddoc = Nothing
Set wdapp = Nothing
End Sub
不行,结果还是0,条件设<5,好想又成了死循环,还是延时吧,就设1000ms了。
实在不行,要用笨办法了:程序中选取最后一段(必须的)(幸好只有一行),读取页脚字串(设的第*页),提取“*”。
谁还有高招呀,谁能解释一下延时为什么不好用???
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Command1_Click()
Dim wdapp As Word.Application
Dim wddoc As Word.Document
Set wdapp = New Word.Application
Set wddoc = wdapp.Documents.Open("G:\2007\Document\F.doc") '(App.Path & "\f.doc")
Dim filepage As String
Sleep (1000)
filepage = CStr(wddoc.BuiltinDocumentProperties(wdPropertyPages) - 3)
MsgBox filepage
wddoc.Close
wdapp.Quit
Set wddoc = Nothing
Set wdapp = NothingEnd Sub我测试了下
这样没什么问题
不加这句时开始显示0
加了后显示正常了
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Command1_Click()
Dim wdapp As Word.Application
Dim wddoc As Word.Document
Dim filepage As String
Set wdapp = New Word.Application
Set wddoc = wdapp.Documents.Open("C:\D.doc") '(App.Path & "\f.doc")
Label1.Caption = wddoc.BuiltInDocumentProperties(wdPropertyPages)
'Sleep (1000)
filepage = CStr(wddoc.BuiltInDocumentProperties(wdPropertyPages) - 3)
Label1.Caption = Label1.Caption & "|" & filepage & "|" & wddoc.BuiltInDocumentProperties(wdPropertyPages)
MsgBox filepage
wddoc.Close
wdapp.Quit
Set wddoc = Nothing
Set wdapp = NothingEnd Sub
1、有没有另一个函数可以在word读入全部文档内容之前就可以获取总页数;
2、应该有一个函数或事件说明word已读入全部文档内容,此时再取页数就准确了。
Private Sub Command1_Click()
Dim wdapp As Word.Application
Dim wddoc As Word.Document
Set wdapp = New Word.Application
Set wddoc = wdapp.Documents.Open(App.Path & "\f.doc")
Dim filepage As String
do while wddoc.BuiltinDocumentProperties(wdPropertyPages)<=3
doevents
loop
filepage = CStr(wddoc.BuiltinDocumentProperties(wdPropertyPages) - 3)
MsgBox filepage
wddoc.Close
wdapp.Quit
Set wddoc = Nothing
Set wdapp = Nothing
End Sub
Private Sub Command1_Click()
Dim wdapp As Word.Application
Dim wddoc As Word.Document
Set wdapp = New Word.Application
Set wddoc = wdapp.Documents.Open(App.Path & "\f.doc")
Dim filepage As String
do while wddoc.BuiltinDocumentProperties(wdPropertyPages)<=3
doevents
loop
filepage = CStr(wddoc.BuiltinDocumentProperties(wdPropertyPages) - 3)
MsgBox filepage
wddoc.Close
wdapp.Quit
Set wddoc = Nothing
Set wdapp = Nothing
End Sub 不建议用sleep,虽然不会像楼上朋友说的暂停word进程,但是由于不同的计算机的处理能力不同,甚至在同一台机子上打开不同的文档,word读入前三页内容的用时都不会是相同的。
filepage = CStr(wddoc.BuiltinDocumentProperties(wdPropertyPages) - 3)
之前加一句:
wddoc.Paragraphs(wddoc.Paragraphs.Count).Range.Select(最后一段为落款,不足一行)