setwithFonts

 graphics ML え~さんノビのさんのアイデアで、文字コードを判定して欧文、ひらがな、それ以外でフォントやサイズ、垂直位置を調整した文字組を実現するコードを書きました
 フォントの設定が思ったようにいかず、テキストを全部削除して1文字ずつすべての属性を設定しながら追加するという恐ろしく効率の悪い処理方法を採用しました。
 このテキスト周りの処理、ちょっとややこしすぎです。もっと素直な作りかわかりやすい説明をお願いします。>Corelさん


Attribute VB_Name = "setwithFonts"
Option Explicit

Sub Main()
' ResetLocale
' Copyright by Albatross (c)2003
' Ver 1.00 2003/10/30
' Ver 1.01 2003/11/01

    Dim ccode As Integer
    Dim wcounter As Integer
    Dim countmax As Integer
    Dim objtext As Text
    Dim wt As TextRange
    Dim stringbuffer As String
    Dim currstring As String
    
    If ActiveDocument Is Nothing Then
        MsgBox "ドキュメントがありません", vbCritical, "Error"
        Exit Sub
    End If
    If Application.ActiveSelection.Shapes.Count <> 1 Then
        MsgBox "オブジェクトが選択されていないか、複数選択されています", vbCritical, "Error"
        Exit Sub
    End If
    If Application.ActiveSelection.Shapes(1).Type <> cdrTextShape Then
        MsgBox "選択されたオブジェクトはテキストではありません", vbCritical, "Error"
        Exit Sub
    End If
    
    Set objtext = Application.ActiveSelection.Shapes(1).Text
    With objtext.Story
        stringbuffer = .WideText
        .Characters.All.Delete
    End With
    countmax = Len(stringbuffer)
    For wcounter = 1 To countmax
        currstring = Mid$(stringbuffer, wcounter, 1)
        
        ccode = AscW(currstring)
        With objtext.Story.Characters.Last
            If ccode > -1 And ccode < 256 Then '半角
                Set wt = .InsertAfter(currstring, cdrEnglishUS, cdrCharSetANSI, "Arial Black")
                With wt
                    .Size = 14
                    .VertShift = 0
                End With
            ElseIf ccode < -31849 Then 'たぶんひらがな・カタカナと一部記号
                Set wt = .InsertAfterWide(currstring, cdrJapanese, cdrCharSetShiftJIS, "MS ゴシック")
                With wt
                    .Size = 12
                    .VertShift = 6
                End With
            Else
                Set wt = .InsertAfterWide(currstring, cdrJapanese, cdrCharSetShiftJIS, "MS 明朝")
                With wt
                    .Size = 16
                    .VertShift = 0
                End With
            End If
        End With
    Next wcounter
End Sub

<<戻る