プロが教えるわが家の防犯対策術!

オープンしているWORDファイルで使用されているフォント名とサイズを全て一覧表示するVBAを希望しています。 次のような表示が欲しいのですが、よろしくお願いします。

MSP ゴシック 10
MSP ゴシック 12
Arial 14
Times New Roman 10
----------------------------
この質問に対してn-jun さんより以下のご回答を頂きました。サンプルを作りテストしたところWOOD2007で希望通りの結果が得られましたのでベストアンサーとさせてもらいました。 しかし、その後大きなWORDファイルに適用したところ、結果が表示されません。 エラーがでれば問題解決につながるのでしょうが、何らエラーメッセージが出ません。 ご指導いただければありがたいです。
--------------------------------
Word2002で検証しました。。。
Sub try()
Dim myDic As Object
Dim v, vv
Dim i As Integer

Set myDic = CreateObject("Scripting.Dictionary")
i = 0
ReDim vv(i)
For Each v In ActiveDocument.Range.Characters

If Len(v) > 0 Then
If Not myDic.Exists(v.Font.Name & " " & v.Font.Size) Then
myDic(v.Font.Name & " " & v.Font.Size) = ""
vv(i) = v.Font.Name & " " & v.Font.Size
i = i + 1: ReDim Preserve vv(i)
End If
End If

Next

MsgBox Join(vv, vbCrLf)

Set myDic = Nothing

End Sub

A 回答 (2件)

No.1です。



WordVBAは殆どやったことはないのですが、
Excelなんかでもデータ数が増えてくると
動きが悪くなるケースもあります。

今回のコードは1文字ずつチェックしていくため
ページ数増加による文字数が増えているのが
影響してくるのではないかと思われます。

エラーが出ていないとの事ですから
Dim i As Integer

Dim i As Long
に変更するとかも違うでしょうし。。。。

ファイルを分割して調べるなどしかないのかな?
    • good
    • 0
この回答へのお礼

Integer から Longに変えてみましたが、結果は表示されませんでした。
色々お世話になりました。

お礼日時:2012/06/21 23:24

例えば大きなワードファイルの半分とかならどうなのかとか、


大きなワードファイルはコードを記載したものとは
別のドキュメントなのかとか、
色々条件になる部分がありそうですけど・・・

例えばコードを記載したものとは
別のドキュメントであれば、

For Each v In ActiveDocument.Range.Characters



For Each v In Documents("abc.doc").Range.Characters
(adc.docと言うドキュメントで既に開いている場合)

にしてみるとかかな?

あとはその大きなワードファイルが
本当に大きすぎるとかなら、
そのファイルで検証しないと難しいかも。

この回答への補足

n-jun さん

ご返事ありがとうございます。

最後のファイル名を入れる方法は試しましたが、今までと変わりませんでした。

テストしたファイルは91ページのA4ファイルです。 10ページまでのファイル、20ぺージまでのファイル、30ページまでのファイル、40ページまでのファイルは正しく結果が表示されました。しかし、50ページまでのファイルで結果表示が出なくなりました。

上記のファイルは殆どが表の構成になっており、その中には200ほどの図が入っており、また多くのハイパーリンクが設定されております。

ファイルが大きくなるだけで結果が違うようなことがVBAでは良くあることなのでしょうか?

補足日時:2012/06/21 20:00
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!