Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get the number of pages in a Word document

Tags:

ms-word

vba

I am making lots of changes to a Word document using automation, and then running a VBA macro which - among other things - checks that the document is no more than a certain number of pages.

I'm using ActiveDocument.Information(wdNumberOfPagesInDocument) to get the number of pages, but this method is returning an incorrect result. I think this is because Word has not yet updated the pagination of the document to reflect the changes that I've made.

ActiveDocument.ComputeStatistics(wdStatisticPages) also suffers from the same issue.

I've tried sticking in a call to ActiveDocument.Repaginate, but that makes no difference.

I did have some luck with adding a paragraph to the end of the document and then deleting it again - but that hack seems to no longer work (I've recently moved from Word 2003 to Word 2010).

Is there any way I can force Word to actually repaginate, and/or wait until the repagination is complete?

like image 673
Gary McGill Avatar asked Jun 03 '13 10:06

Gary McGill


People also ask

How do I count multiple pages in a word document?

On the “Choose Details” dialog box, find “Pages” in the “Details” list and select the check box next to “Pages” so there is a check mark in the box. Click “OK”. The “Pages” column is added to the far right of the current columns. The number of pages in each document displays.

How do I get continuous Page Numbers in word?

To make the page numbers continuous: Click on the page with the incorrect number, then go to Insert > Page Number > Format Page Numbers. Choose Continue from previous section. Select OK to save changes.


2 Answers

I just spent a good 2 hours trying to solve this, and I have yet to see this answer on any forum so I thought I would share it.

https://msdn.microsoft.com/en-us/vba/word-vba/articles/pages-object-word?f=255&MSPPError=-2147217396

That gave me my solution combined with combing through the articles to find that most of the solutions people reference are not supported in the newest versions of Word. I don't know what version it changed in, but my assumption is that 2013 and newer can use this code to count pages:

ActiveDocument.ActiveWindow.Panes(1).Pages.Count.

I believe the way this works is ActiveDocument selects the file, ActiveWindow confirms that the file to be used is in the current window (in case the file is open in multiple windows from the view tab), Panes determines that if there is multiple windows/split panes/any other nonsense you want the "first" one to be evaluated, pages.count designates the pages object to be evaluated by counting the number of items in the collection.

Anyone more knowledgeable feel free to correct me, but this is the first method that gave me the correct page count on any document I tried!

Also I apologize but I cant figure out how to format that line into a code block. If the mods want to edit my comment to do that be my guest.

like image 51
Kris K Avatar answered Nov 16 '22 04:11

Kris K


Try (maybe after ActiveDocument.Repaginate)

ActiveDocument.BuiltinDocumentProperties(wdPropertyPages)

It is causing my Word 2010 to spend half-second with "Counting words" status in status bar, while ActiveDocument.ComputeStatistics(wdStatisticPages) returns the result immediately.

Source: https://support.microsoft.com/en-us/kb/185509

like image 45
alexkovelsky Avatar answered Nov 16 '22 04:11

alexkovelsky