web-dev-qa-db-ja.com

テーブルをループして最後に停止するWordマクロ

私は映画の脚本を持っています。最初の列はタイムコード、2番目の列はスピーカー、3番目の列はダイアログです。

スクリプト全体をループしたいのですが、3番目の列(ダイアログ)に対してのみ何かを実行します。

3番目の列に対して行うことのマクロはすでにあります。私はそれが必要です:

  • 行1列1から開始
  • タブから行1列2
  • もう一度タブで行1、列3に移動します(次に、事前に作成したマクロを実行します)
  • 次に、もう一度タブを押してr2c1に戻ります。

ただし、空のテーブルセルにヒットすると停止する必要があります。ドキュメントの終わりをさまざまにチェックしているにもかかわらず、タブキーがプログラムでチェックされるため、マクロは無限ループに陥り続け、新しいセルを作成し続けます。そこにあるすべてのソリューションは、それが通常のテーブル化されていないドキュメントであり、次のようなコードであると想定しています。

Do Until ActiveDocument.Bookmarks("\Sel") = ActiveDocument.Bookmarks("\EndOfDoc")
    '(Do something)
Loop

失敗します。

1
chris G

各セルにタブを付けることなく、プログラムでテーブルの行とセルを反復処理できます。

Sub ProcessScriptTable()
  Dim oTbl As Table
  Set oTbl = ActiveDocument.Tables(1)

  For Each oRow In oTbl.Rows
    Set oCell = oRow.Cells(3)

    'Do something with each cell
    MsgBox oCell.Range.Text
  Next

End Sub
2
Adam