2016-04-22 49 views
0

私は、テーブル構造、5行、2列のWordテンプレートファイルを持っています。各行の最初の列には、ID、<、PID >などのテンプレートタグがあります。各タグは異なるので、5つのタグが異なります。VBAからWord文書にタブ文字を挿入

テンプレートファイルを開き、Excelシートのデータに基づいて、テンプレートタグを実際の値に置き換えてテンプレートに基づいて新しい単語文書を作成します。

最初の列にあるすべてのテキストではなく、テーブルの2番目の列に「タブ」したいと思います。

ここに、Excelシートから取得した値を出力するためのコードを示します。

With wrdDoc 
     .Content.Find.Execute FindText:="<PNAME>", ReplaceWith:="<Project Name> " & strProjectName 
     .Content.Find.Execute FindText:="<PID>", ReplaceWith:="<Project ID>=" & strProjectID 
     .Content.Find.Execute FindText:="<DNAME>", ReplaceWith:="<Department Name>=" & strDepartmentName 
     .Content.Find.Execute FindText:="<A>", ReplaceWith:="<Active>=" & strActive 
     .Content.Find.Execute FindText:="<HO>", ReplaceWith:="<Head Office>=" & strHeadoffice 
    End With 

私はchr(9)とvbTabを使ってみましたが、最初の列にタブを作成しました。

答えて

0

挿入ポイントが表のセル内にある場合、あなたはこのような何か使用して次の表のセルに移動することができます。次のセルにカーソルを移動します

Selection.MoveRight Unit:=wdCell 

を。

+0

挿入ポイントは、私はあなたが検索/置換使用して次のセルにオーバータブをことができるとは思わない – andrewb

+0

を検索/置換使用して、元のコードを参照し、知られていません。 – gtwebb

+0

.Find.Executeを使用して各テンプレートタグを順番に(置き換えるのではなく)順番に探し、適切なものに置き換えてから、次の列に移動して、その列にさらにテキストを挿入します(それが完全にはっきりしていないので、OPが望んでいると仮定して)。あなたが行うことができないことは、.Find.Executeへの一回の呼び出しですべてを行うことです。 –

0

あなたがすでに持っているものに基づいています一つはWordの表にデータを書き込むために使用できる多数のアプローチがあります:あなたの場合Find.Execute

を使用して

1テンプレートのテーブルにあらかじめ定義されたタグを貼り付ける必要がある場合は、Document.Contentの代わりにRangeオブジェクトで検索する必要があります。これにより、ワークブックレベルのブック内のセルをターゲットにするのではなく、レンジでの作業方法と同様に、ドキュメント内の「ターゲット位置」を操作できます。

Dim rngSearch as Word.Range 
Set rngSearch = wrdDoc.Content 
rngSearch.Find.Execute FindText:="<PNAME>", ReplaceWith:="<Project Name> " & strProjectName 
'Move to next cell 
rngSearch.Collapse wdCollapseEnd 
rngSearch.Text = "text for the second column" 
rngSearch.Find.Execute FindText:="<PID>", ReplaceWith:="<Project ID>=" & strProjectID 
'and repeat collapsing, assign text and Find.Execute 

コード構造の考慮事項:Find/Collapse/Textの各ステップを別のプロシージャ(Sub)に入れることは意味があります。 、

代わりに、Word文書内の文字列タグにFindを使用してのブックマーク

を使用して

'code in main procedure 
    Dim rngFind as Word.Range 
    Set rngFind = wrdDoc.Content 
    WriteToTagsInWordTable "<PNAME>", "<Project Name> " & strProjectName, 
         "text in column two", rngFind 
    WriteToTagsInWordTable "<PID>", "<Project Name>=" & strProjectID, 
         "other text in column two", rngFind 
    'and so on... 

Sub WriteToTagsInWordTable(sFind as String, sReplace as String, _ 
          sColTwo as String, ByRef rngSearch as Word.Range) 

    rngSearch.Find.Execute FindText:=sFind, ReplaceWith:=sReplace 
    'Move to next cell 
    rngSearch.Collapse wdCollapseEnd 
    rngSearch.Text = sColTwo 
End Sub 

2をブックマークでタグを置き換えると:それはすべての「タグ」のための3つのステップを繰り返す救いますコード内でブックマークを直接ターゲットに設定します。これは速くなければなりません。 2番目の列に追加のブックマークを挿入するか、上記の方法を使用して次のセルに移動します。コード内で

のテーブルを作成する

With wrdDoc 
    .Bookmarks("PName").Range.Text = "<Project Name> " & strProjectName 
    .Bookmarks("PNameInfo").Range.Text = "text for the second column" 
End With 

3.それから、(通常Bookmarkで示される)ターゲットRangeに割り当てられている文字で区切られた文字列として、VBAコードで生成するのは、最も効率的です、テーブルに変換されます。詳細は、MSDNの記事https://msdn.microsoft.com/en-us/library/aa537149%28v=office.11%29.aspx?f=255&MSPPError=-2147217396のセクション「データでWordテーブルにデータを取り込む」を参照してください。

この記事の関連コードは次のとおりです。配列から複数行、複数列のテーブルの文字列を作成し、その文字列をWord Rangeに渡してテーブルに変換する方法を示します。

Sub CreateTableFromString(ByRef rng As Word.Range, _ 
    ByRef adata() As Variant) 
    Dim tbl As Word.Table 

    rng.Text = BuildDataString(adata) 
    Set tbl = rng.ConvertToTable(vbTab, _ 
     AutoFitBehavior:=wdAutoFitFixed, _ 
      DefaultTableBehavior:=wdWord8TableBehavior) 
End Sub 

Function BuildDataString(aData() As Variant) As String 
    Dim dataString As String 
    Dim nrRow As Long, nrCol As Long 

    For nrRow = 0 To UBound(aData, 1) 
     For nrCol = 0 To UBound(aData, 2) 
      dataString = dataString & aData(nrRow, nrCol) 
      If nrCol < UBound(aData, 2) _ 
       Then dataString = dataString & vbTab 
     Next nrCol 
     If nrRow < UBound(aData, 1) _ 
      Then dataString = dataString & vbCr 
    Next nrRow 
    BuildDataString = dataString 
End Function 
関連する問題