へっぽこへたれシステム管理人の管理者です。
ワードは、20年以上使っていますが、VBA【マクロ】を使うのは生まれて初めてでした・・・
エクセルのVBAとは、記述が異なるというか・・・
別モノな感じですので、なかなか記述しずらい。
ネットにもあまり落ちていないので、かなりてこずりましたので、今回つかった記述を忘備録として残しておきます。
表を選択する
ActiveDocument.Tables(*).cell(*.*).Select
【*】は適宜変わります。【cell】は票の行と列を表します。
ActiveDocument.Tables(*).Cell(*.*).Range
を付けると範囲してして、次のように操作できる。
'表の文字列を消す(テーブル1の1列)
ActiveDocument.Tables(1).Cell(1, 1).Range.Delete
'表に文字列を挿入テーブルの1の1列)
ActiveDocument.Tables(1).Cell(1, 1).Range.Text = "入力する文字列"
カーソル移動
'例:列全体を選択した状態から先頭へ
Selection.Collapse Direction:=wdCollapseStart
'カーソルのある行の先頭へ
Selection.HomeKey Unit:=wdLine
'カーソルのある行の最後へ
Selection.EndKey Unit:=wdLine
'カーソルのある行から右へ(シストで選択)countで移動量を指定する
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
'カーソルのある行から左へ(シストで選択)countで移動量を指定する
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
'Extend:=wdExtend を消せばカーソル移動のみ
'カーソルを上へ
Selection.MoveUP
'カーソルを下へ
Selection.MoveDown
インデントの位置を取得
'インデント位置の取得
Dim rowhead As Integer
rowhead = Selection.ParagraphFormat.FirstLineIndent
行番号を取得
'行番号取得
Dim rownum as Integer
rownum = Selection.Information(wdFirstCharacterLineNumber)
表の中でループさせる
'表の行数分繰り返し
Do While Selection.Information(wdWithInTable)
繰り返し作業を記述
Loop
テストマクロ
このマクロは、ワードに貼り付けた2列の表について、2列目の各行の先頭文字を取得するものです。
表自体は、1行で作成していますが、2ページ目の表の行数は、1からリセットされる仕様のようです。
Sub test()
'最初の表の2列目を選択
ActiveDocument.Tables(1).Columns(2).Select
'選択した2列目の先頭にカーソル移動
Selection.Collapse Direction:=wdCollapseStart
'表の行数分繰り返し
Do While Selection.Information(wdWithInTable)
'行番号取得
rownum = Selection.Information(wdFirstCharacterLineNumber)
'行の先頭文字列を取得
Selection.HomeKey Unit:=wdLine
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
'デバッグプリント
Debug.Print rownum & " " & Selection.Text & vbCr
Dim test As String
test = test & rownum & " " & Selection.Text & vbCr
'行の先頭にカーソル移動
Selection.HomeKey Unit:=wdLine
'次の行に移動
Selection.MoveDown
Loop
MsgBox test
End Sub
コメント