views:

200

answers:

1

Does anyone know how to detect the use of Theme fonts in Powerpoint 2007 slide objects using VBA? If one looks at Shape.TextFrame.TextRange.Font.Name the font name appears as simple name (ex: "Arial") whether or not the font was assigned as a fixed name or a Theme name (subject to change with the document theme). I don't see any other property in the Object Model that would flag the name as tied to a theme (such as ObjectThemeColor for colors).

Thanks!

A: 

There is no direct method (that I know of), however you can check with an If/Then:

Sub checkthemeFont()
    Dim s As Shape
    Set s = ActivePresentation.Slides(1).Shapes(1)
    Dim f As Font
    Set f = s.TextFrame.TextRange.Font

    Dim themeFonts As themeFonts
    Dim majorFont As ThemeFont

    Set themeFonts = ActivePresentation.SlideMaster.Theme.ThemeFontScheme.MajorFont
    Set majorFont = themeFonts(msoThemeLatin)

    If f.Name = majorFont Then
        Debug.Print f.Name
    End If
End Sub
Otaku
Thanks Otaku for the reply but I think this only tells you whether the font name matches the Theme name, not whether the font of this shape is controlled by the theme setting. You could see this in the GUI by selecting the text, right clicking and selecting one of the top 2 fonts in the "Theme Fonts" section (The theme Headings and Body fonts). Then add another shape but select the same font name from the list below (the "All Fonts" section). The font name appears the same for both objects. Change the Theme and you'll see the first shape's font change but not the second.
Sam Russo
Gotcha. Yeah, that is a tough one. The only thing I was able to find was the opposite of what you need, which is how to *set* the theme fonts (http://pptfaq.com/FAQ00957.htm). Getting them from the object as a property of the object doesn't appear to have any documentation.
Otaku
Yes, I found that too but I've never been able to catch font names like "+mj-It" as Steve mentions in the article, just plain vanilla font names...
Sam Russo
Today, to my surprise I'm stepping thru some code and I did in fact just now get the elusive theme font name "+mn-lt" for a TextRange.Font.Name. I don't think it is consistent - nearly all other times I've only seen full names like "Arial". I'll just be ready for both now. And I think the way to drop the theme reference is always to set the font name with the full name.
Sam Russo