VBAを使用して、Word文書(特に2007年)に制限付きフォントが含まれているかどうかを判断する方法はありますか?
ドキュメントに制限付きフォントが含まれているかどうかを判断するためだけに、フォントを削除する方法は必ずしも必要ではありません。また、埋め込まれたフォントをチェックする方法しかない場合は、それは許容されます。私の場合、ほとんどの場合、制限されたフォントになるからです。
VBAを使用して、Word文書(特に2007年)に制限付きフォントが含まれているかどうかを判断する方法はありますか?
ドキュメントに制限付きフォントが含まれているかどうかを判断するためだけに、フォントを削除する方法は必ずしも必要ではありません。また、埋め込まれたフォントをチェックする方法しかない場合は、それは許容されます。私の場合、ほとんどの場合、制限されたフォントになるからです。
Word 2007を使用している場合は、ドキュメントのOOXMLを調べて、特定のフォントが埋め込まれているかどうかを確認できます。私が判断できる限り、それがXMLに埋め込まれている場合、フォントには次の子ノードが1つ以上含まれます。
(スペースを入れる必要がありました。そうしないと、正しく表示されません)
詳細については、http://msdn.microsoft.com/en-us/library/documentformat.openxml.wordprocessing.font.aspxをご覧ください。
これに基づいて、何かを組み合わせてこの情報を抽出できます。アクティブなドキュメントを確認する以下の例をまとめました。
私はこれがそれほどきれいではないことを認めなければなりません、そしてそれは確かにいくらかの最適化で行うことができます、しかしそれは仕事をします。MSXMLへの参照をVBAプロジェクトに追加することを忘れないでください。
' returns a delimited list of fonts that are embedded
Function GetEmbeddedFontList(Optional ByVal sDelimiter As String = ";") As String
Dim objDOMDocument As MSXML2.DOMDocument30
Dim objXMLNodeList As MSXML2.IXMLDOMNodeList
Dim objXMLNodeListEmbed As MSXML2.IXMLDOMNodeList
Dim lNodeNum As Long
Dim lNodeNum2 As Long
Dim sFontName As String
Dim sReturnValue As String
On Error GoTo ErrorHandler
sReturnValue = ""
Set objDOMDocument = New MSXML2.DOMDocument30
objDOMDocument.LoadXML ActiveDocument.WordOpenXML
' grab the list of fonts used in the document
Set objXMLNodeList = objDOMDocument.SelectNodes("//w:fonts/w:font")
For lNodeNum = 0 To objXMLNodeList.Length - 1
' obtain the font's name
sFontName = objXMLNodeList.Item(lNodeNum).Attributes(0).Text
'check its child nodes to see if any contain the word "embed", if so, then the font is embedded
For lNodeNum2 = 0 To objXMLNodeList.Item(lNodeNum).ChildNodes.Length - 1
If objXMLNodeList.Item(lNodeNum).ChildNodes(lNodeNum2).nodeName Like "*embed*" Then
sReturnValue = sReturnValue & sFontName & sDelimiter ' add it to the list
Exit For
End If
Next lNodeNum2
Next lNodeNum
ErrorExit:
GetEmbeddedFontList = sReturnValue
Exit Function
ErrorHandler:
sReturnValue = ""
Resume ErrorExit:
End Function