[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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.