タイムマシーンがあったら、過去と未来どちらに行く?

Cell内の一部を指定する方法(Word VBA)
Word VBAで、特定のCellの中の一部だけを指定するには、どうすればいいのでしょうか。
たとえば、ある表のCell(1, 2)の6~10文字目を指定して、そこだけを太字にするために、
Set Date1 = Table1.Cell(1, 2).Range(Start:=5, End:=10)
としても、RangeメソッドはCellに使えないようなので、エラーになってしまいます。

A 回答 (2件)

> RangeメソッドはCellに使えないようなので



WordのVBA編集画面のオブジェクトブラウザで確認しますと、

Document.Range メソッド → Start:, End: で範囲を指定できる
Cell.Range プロパティ(メソッドではない)→ Start: End: の範囲指定はできない
事がわかります。ご指摘の通りです。

それで、
  Dim 範囲 As Range
  Set 範囲 = ThisDocument.Tables(1).Cell(2, 3).Range
  Debug.Print 範囲.Start; 範囲.End
などとしてみますと、この Range はセルではなく、
セクションの頭からの位置として、Start, End を持っていることがわかります。

そこで
  Set 範囲 = ThisDocument.Tables(1).Cell(2, 3).Range
  範囲.End = 範囲.Start + 10
  範囲.Start = 範囲.Start + 6 - 1' ★注意★ -1 が必要
  範囲.Font.Color = wdColorRed
  Debug.Print 範囲.Text

としてみると、うまくいきました
(ここでは太字ではなく赤字にしていますが、おなじことです)
    • good
    • 1
この回答へのお礼

ありがとうございます。これでうまく行きました。

お礼日時:2010/09/04 12:49

こういうことでしょうか。


文字数が足りなければ、その文字列最後まで選択します。


Sub Test1()
 Dim i As Long, j As Long, k As Long
 Dim buf As String
 Const iSTART As Integer = 5 'スタート
 Const iEND As Integer = 10 '終わり
 
 With Tables(1).Cell(1, 2).Range 'セル
  .Select
  '文字カウント
  buf = Selection.Text
  For i = iSTART + 1 To Len(buf)
   If AscW(Mid(buf, i, 1)) >= 33 Then
    k = k + 1
   Else
    Exit For
   End If
  Next
  If k >= (iEND - iSTART) Then
   j = iSTART
  ElseIf k > 0 Then
   j = k
  Else
   Exit Sub
  End If
  Selection.MoveLeft Unit:=wdCharacter, Count:=1
  Selection.MoveStart Unit:=wdCharacter, Count:=iSTART
  Selection.MoveRight Unit:=wdCharacter, Count:=j, Extend:=wdExtend
  Selection.Font.Bold = True
  Selection.MoveLeft Unit:=wdCharacter, Count:=1
 End With
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。しかし、ちょっとややこしそうですね。

お礼日時:2010/09/04 12:46

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報