[[20080827133910]] 『VBAでのテキストボックスの部分的書式指定』(うめ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAでのテキストボックスの部分的書式指定』(うめ)

 いつも教えて頂いてありがとうございます。

 今日は、「VBAでのテキストボックスの部分的書式指定」について教えてください。
 テキストボックスは例えば、

 @氏名:○○○○(改行)
 A住所:○○○○○○○(改行)
 B電話:○○○○○

 という情報で、○の部分は可変でセルの値を参照しています。

 "@氏名:"は標準の文字で、続く参照データの "○○○○"は太字、赤にしたいです。
 A、Bも同じで、実はこれがIくらいまで続きます。

 マクロの記録をして、表記を見てみると、
 Selection.Characters(Start:=25, Length:=97).Font
 **********************
 **********************
 という記述になってしまい、StartとLengthについての記述をどうすればよいか、
 分かりません。
 (たぶん、セルのLengthとかをイチイチ見ていく方法もあると思いますが、
   改行とか"@氏名"とかの固定の部分を基準にしたもっと分かりやすい記述の仕方が
   可能なら、それを教えてください)

 どうぞ、宜しくお願い致します。


 >たぶん、セルのLengthとかをイチイチ見ていく方法もあると思いますが、
 意味がよく解りませんが、多分考えていることは同じでいちいちチェック
 していかないとダメだと思います。

 >改行とか"@氏名"とかの固定の部分を基準にしたもっと分かりやすい記述の仕方が
 >可能なら、それを教えてください
 これもよく意味が解りませんが、改行で分解したいのならこんな感じ。

 TT = Split(TextBox1.Value, vbCrLf)
 MsgBox TT(0)
 MsgBox TT(1)
 MsgBox TT(2)

 上記のように1行単位で文字を分けても、最終的には地道にinstrやなんかで文字沸かしていくと思います。
 正規表現が得意な方が多いですから、正規表現で分けてくれる方も要るかもしれません。
 BJ


 BJさん、ご回答ありがとうございます。
 ごめんなさい、ご回答頂いたコードは難しくて理解できませんでした。m(_ _)m

 もう少し、質問してもよろしいでしょうか?

 実際のコードは、以下の通りで、
 テキストボックスの中の、セル参照の部分だけ赤・太字にしたいのです。

 >いちいちチェックしていかないとダメだと思います。

 と言うことは、
 下記の「名称」のRange("E2") の部分の位置を把握するためには、
 その前の行の「受注先コード」のRange("C2") の文字数を数えておく必要がある
 ということでしょうか。。。
 その方式で行くと、最後の行は、合計7個のセルの文字数を数えておく必要があります。。。
 (変数に代入して、加算していけばいいのでしょうか?)

 ********************
 With Worksheets(4)
    .Shapes("Text Box 2").Select
    Selection.Characters.Text = _
            "請求書・仕切書送付:" & Chr(10) _
            & "受注先コード:" & .Range("C2") & Chr(10) _
            & "名称:" & Range("E2") & Chr(10) _
            & Chr(10) & Chr(10) _
            & "検索文字列:" & .Range("E3") & Chr(10) _
            & "〒  :" & .Range("G3") & Chr(10) _
            & "住所:" & .Range("F3") & .Range("H3") & Chr(10) _
            & "TEL :" & .Range("I3") & Chr(10) _
            & "FAX :" & .Range("J3")
 End With

 With Selection.Characters(Start:=19, Length:=6).Font
    .Name = "MS UI Gothic"
    .FontStyle = "太字"
    .ColorIndex = 5
 End With

 ********************
 つたない知識レベルで申し訳ありませんが、ご回答宜しくお願いします。
 (うめ)

 >という記述になってしまい、StartとLengthについての記述をどうすればよいか、
 >分かりません。
 Start は Instr で探して、Length は文字数でいいのでは? (アカギ)


 「:」の次から改行または最後までの文字、で1つめはパス。

 Sub test()
    Dim Shp As Shape
    Dim regEx As Object
    Dim Matches As Variant
    Dim Match As Variant
    Dim C As Long

    Set regEx = CreateObject("VBscript.RegExp")
    Set Shp = ActiveCell.Worksheet.Shapes(1) 'ここは適宜修正

    With regEx
        .Global = True
        .Pattern = ":(.)*(\n)*"
        Set Matches = .Execute(Shp.TextFrame.Characters.Text)
    End With

    C = 0
    With Shp.TextFrame
        For Each Match In Matches
            C = C + 1
            If C >= 2 Then
                With .Characters(Match.firstindex + 2, Match.Length - 1).Font
                    .Name = "MS UI Gothic"
                    .FontStyle = "太字"
                    .Color = vbRed
                End With
            End If
        Next
    End With

    Set Matches = Nothing
    Set regEx = Nothing
    Set Shp = Nothing
 End Sub

 (通りすがり)


 アカギさん、通りすがりさん、ご回答ありがとうございました。

 どのやり方でも、結構面倒な手順になるのですね。。。

 私は結局「固定部分のの文字数」と「セル参照の文字数」を、
 それぞれをArray1、Array2にセットし、For Each...Nextの中でCountの文字数に足していくようにして、
 どうにか解決できました。
 いろいろありがとうございました。

 ★「Instr」使ったこと無いので、勉強します。

 (うめ)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.