![]() |
#2
|
|||
|
|||
![]()
Most of what you have written is a good attempt but there are a number of simplifications that can be made and a couple of misunderstandings that need to be corrected.
The definition and assignment Dim mycomment As Object Set objDoc = ActiveDocument are not necessary as you only use active document once in your macro. So you could use Activedocument directly (as ActiveDocument.storyranges(wdmaintextstory). If you wanted this macro to be usable by multiple documents it would be better to have a parameter of word.range which represents the range you want to check. e.g. Sub CheckFonts(this_range as word.range) If you then wanted to add flexibility you could make the parameter optional so that if no parameter was provided the active document is used. The default action can be specified as the parameter to assign to the optional argument if no such parameter is supplied but unfortunately you can't specify the active document as the default range. Sub CheckFonts(optional this_range as word.range=nothing) The with statement is useful for providing a shortcut to save retyping qualifier text multiple times. Thuis it makes more sense to use the full reference in the for loop and to dereference objSingleWord within the loop The method .addcomment is an Excel method so won't work in Word. You can check on the definition of keywords by clicking on the keyword and then pressing F1. This will bring up the MS help page for the keyword. This would have helped you see that you'd got an Excel rather than Word method. The correct syntax is '<range>.comments.add range:=<a_range>, Text:=<comment text> Unfortunately, in word, uou cannot change the visibility of individual comments. You can only have all or none displayed. The visibility of comments is a property of the View object which is in turn a property of the ActiveWindow object. To hide all the comments you are adding use this_range.application.activewindow.view.showcomme nts=false For the name of the font this is obtained using .font.name Code:
Sub test1() CheckFonts End Sub sub test2() CheckFonts ActiveDocument.StoryRanges(wdTextMainStory) End Sub Sub test3() dim my_section as Word.Section for each my_section in activedocument.sections checkfonts my_section.range ' do something for each section? next end sub Sub CheckFonts(Optional this_range As Word.Range = Nothing) Dim objSingleWord As Word.Range Dim my_comment As Word.Comment If this_range Is Nothing Then Set this_range = ActiveDocument.StoryRanges(wdMainTextStory) End If this_range.Application.ActiveWindow.view.ShowComments = False For Each objSingleWord In this_range.Words With objSingleWord If .Font.Size <> 10 Then .Comments.Add Range:=objSingleWord, Text:="Warning: Font size is " & .Font.Size ' or, if you wish to do other activities with the added comment use ' Set my_comment = .Comments.Add(Range:=objSingleWord, Text:="here a comment") End If If .Font.name <> "Arial" Then .Comments.Add Range:=objSingleWord, Text:="Warning: Font name is " & .Font.name End If End With Next End Sub |
Tags |
macro vba word |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
Same selection of font..different sizes... | Garyz | Word | 8 | 02-02-2016 09:13 AM |
Change font sizes in template | Calab | PowerPoint | 1 | 12-23-2013 09:29 AM |
Reply: huge font sizes... | Uli | Outlook | 3 | 09-19-2012 06:57 PM |
Font sizes in Outlook 2003 | peterandrew | Outlook | 3 | 09-18-2012 04:26 AM |
Changing all different font sizes by a value | Puffin617 | Word VBA | 6 | 05-21-2009 08:23 AM |