Get page number by bookmark when generate document (.doc) VB.NET - vb.net

I'm currently doing enhancement on a vb.net project by using reference Interop.Microsoft.office.interop.word. Now i able to print out a document and there are few bookmarks in the generated document. Is there any way to retrieve those bookmark's page number? In summary, i want to know the page numbers where those bookmarks are.

I have found the solution as below:
GetPageNumberOfRange(BookmarkA.Range)
Public Function GetPageNumberOfRange(ByVal range As Microsoft.Office.Interop.Word.Range) As Integer
Return range.Information(Microsoft.Office.Interop.Word.WdInformation.wdActiveEndPageNumber)
End Function

Related

Use a Userform for MS Word to Input to Values in Form Fields

I am trying to automate a repetitive manual task for another department. They have a word template several pages long. They have to enter data several times each time they use it. Many of these are repetitive "fields". I thought about setting up custom form fields. But having them go through the navigation and know the field names to update them is not optimal. I found one solution to create a bookmark for each data input, and create links to that bookmark where it needs to be repeated - better but not optimal. I was hoping to create a userform where they can enter all the data and have it populate bookmarks, custom fields, to whatever.
I found a video that does this, but when I try the code, it does not update the bookmark. i created userform with Textbox1, and a CommandButton, and a bookmark in the document called MWDate. The code I am trying to get to work is:
Private Sub CommandButton1_Click()
Dim MWDate As Range
Set MWDate = ActiveDocument.Bookmarks("MWDate").Range
MWDate.Text = Me.TextBox1.Value
Me.Repaint
UserForm1.Hide
End Sub
This is a code example I grabbed and modified from the tutorial video. I don't know what the "Me." is. It does not populate the bookmark, which tells me it is not getting to the repaint line. Nor does it ever get to the hide line.
Anyone have a fix? Or a better way? Thanks for any help you can give.

Remove all tabstops for a particular page

I am trying to format a Word document with the help of VBA.
If I supply a page number, it should clear all tabstops for that particular page only.
I have the code to clear all the tabstops but could not modify it for a specific page.
ActiveDocument.Paragraphs.TabStops.ClearAll
Try this:
Dim pnum As Integer
pnum = InputBox("Enter page number")
ActiveDocument.ActiveWindow.Panes(1).Pages(pnum).Rectangles(1).Range.Paragraphs.TabStops.ClearAll
Remember that pages are a fairly arbitrary concept in a document, so it might not be so easy to identify the content you want to by a page number. Elements that span multiple pages (like tables) can also cause confusion.

Printing custom ranges or items in Word 2010 using VBA

I am fairly new to VBA (Word 2010) and I'm unsure if something I'd like to do is even possible in the way that I want to do it, or if I need to investigate completely different avenues. I want to be able to print ranges (or items) that are not currently enumerated as part of either wdPrintOutRange or wdPrintOutItem. Is it possible to define a member of a wd enumeration?
As an example, I'd like to be able to print comments by a particular user. wdPrintComments is a member of the wdPrintOutItem enumeration, but, I only want comments that have an Initial value of JQC. Can I define a wdPrintCommentsJQC constant? My code is reasonably simple; I have a userform that lets the user pick some settings (comments by user, endnotes only, etc.) and a Run button whose Click event should generate a PrintOut method with the proper attributes. Am I on the wrong track?
(If it matters, the Initial values will be known to me as I write the code. I have a discrete list.)
No, it's not possible to add a constant to a predefined enumeration type.
However, one possible way to do this would be to build a string of page numbers which contain the items you wish to print, open the print dialog in the "dialogs" collection, and set it to print a specified range, andinsert the string containing the list of pages (separate them with commas). Finally, execute the .show method of the print dialog to show it to the user and give them the opportunity to set any other items and click the "ok" button. I've done something very similar when I needed to print a specific chapter of a long document, and so I had to specify the "from" section and page and the "to" section and page for the user. Below I just show how to specify a list of pages instead of the ".form" and "to" I was using:
With Dialogs(wdDialogFilePrint)
.Range = wdPrintRangeOfPages
.Pages = "3,5,7-11"
.show
end with
I'm not sure how you want to print the comments (or other elements), but you could create another document and insert what you want to print on this document.
According to what you want, you could insert them as they were (comments, footnotes, etc) or as plain text, or any other format.

outlook 2007 - is there a way to get the formatted text from an Appointmentitem?

I'm trying to get the formatted text of the appointment item, I've searched everywhere and most places suggest getting the word document of the appointment item :
Word.Document wd = (Word.Document) (item as Outlook.AppointmentItem).GetInspector.WordEditor;
So I do that and I get the word document. But no where does it tell you what to actually do with this word document once you get it. How do I get the formatted text from the word document now?
UPDATE:
To anyone else searching for this answer in the future. I figured out how to do this in ol2007
1) First have have to get the word document from the appoint item via the WordEditor variable.
2) Then you have to use the select and copy functions from the word document to copy the RTF text into your clipboard.
3) make a richtextbox and use the richtextboc paste function to paste whats in the clipboard into your richtextbox.
4) now from the richtextbox you can access the .Rtf function which will now give you the RTF of the appointmentItem.
From my searching this method is the easiest way but you have to take over the clipboard which isn't ideal. There is a second way that I read about that is to save the word document in step 1 into an actually RTF file on your computer and then read in that RTF file.
and third way I suppose to do it would be to parse out the word document in step 1 using the Range.FormattedText function.
UPDATE: To anyone else searching for this answer in the future. I figured out how to do this in ol2007
1) First have have to get the word document from the appoint item via the WordEditor variable.
2) Then you have to use the select and copy functions from the word document to copy the RTF text into your clipboard.
3) make a richtextbox and use the richtextboc paste function to paste whats in the clipboard into your richtextbox.
4) now from the richtextbox you can access the .Rtf function which will now give you the RTF of the appointmentItem.
From my searching this method is the easiest way but you have to take over the clipboard which isn't ideal. There is a second way that I read about that is to save the word document in step 1 into an actually RTF file on your computer and then read in that RTF file.
and third way I suppose to do it would be to parse out the word document in step 1 using the Range.FormattedText function.

Updating Word Template with bookmarks

I have Template made in Word 2003 which is sometimes updated (adding text, bookmarks, formfields ...) and its located on intranet and has the same name all the time (for example "Master_layout.dot"). When somebody create the document from this template (for example version 3) and then I will make version 4 then the document made from version 3 is not updated and it does not include the changes which I made. I would like to use some VBA script which will check if the Template has the same content (formfields, bookmarks, text...) like the document and if not then add the text, formfield and so on into the document.
Thanks for any help or tip.
Rather than checking that the content is the same, you might want to consider using a custom property on the template to store the version number. Then you can just check the version.
Sub CheckVersion()
If ActiveDocument.CustomDocumentProperties("VersionNum").Value <> 4 Then
'do stuff'
End If
End Sub