Word (VBA)

Word VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Word 2016)
Wordのテーブルから別Wordに枠なしでコピペ繰り返し
投稿日時: 21/07/21 20:10:34
投稿者: Asakazu6950

あるWord文書のテーブルの2列名のデータを別Wordに書式を保持したまま、枠なしでデータの
コピペをテーブル末尾まで繰り返し処理をしたいのですが、最初のデータを張り付けた後、
カーソルが先頭に戻ってしまい、結局、テーブル末尾のデータしか残っていません。
 
貼り付け、文書末尾にカーソルを移動、貼り付けを繰り返したいのですが、方法が見つけられません。
アドバイスいただけますでしょうか。
 
よろしくお願いいたします。
 
ソースは以下になります。
Sub sample()
 
    Dim myWord As New Word.Application
    Dim myWordDoc As Word.Document
    Dim oDoc As Word.Document
    Dim maxRow As Integer
    Dim i As Integer
    Dim myPosRange As Range
    Dim myStart As Long
     
    myWord.ScreenUpdating = False
     
    Set myWordDoc = ActiveDocument
     
    Set oDoc = myWord.Documents.Add
 
    With myWordDoc.Tables(1)
     
        maxRow = .Rows.Count
     
        For i = 2 To maxRow
              
              If Len(.Cell(i, 2).Range.Text) > 2 Then
               
                    .Cell(i, 2).Range.Copy
                     
                    oDoc.Content.PasteAndFormat (wdSingleCellText)
                     
                    myWord.Selection.TypeParagraph
                     
                    myWord.Selection.MoveEnd Unit:=wdSentence
                    myWord.Selection.Collapse Direction:=wdCollapseEnd
                     
              End If
               
        Next
         
    End With
     
    myWord.ScreenUpdating = True
 
End Sub

回答
投稿日時: 21/07/22 15:08:19
投稿者: んなっと

なるべく今の手法を使うなら
 
  Dim oTbl As Table
  Dim oDoc As Document
  Dim i As Long
  Set oTbl = ActiveDocument.Tables(1)
  Set oDoc = Documents.Add
  For i = 2 To oTbl.Rows.Count
    If Len(oTbl.Cell(i, 2).Range.Text) > 2 Then
      oTbl.Cell(i, 2).Range.Copy
      With oDoc.ActiveWindow.Selection
        .PasteAndFormat wdSingleCellText
        .InsertParagraphAfter
        .Collapse wdCollapseEnd
      End With
    End If
  Next
End Sub
 
どこかのサイトの情報を参考にしているのですか?

投稿日時: 21/07/23 10:02:23
投稿者: Asakazu6950

アドバイスありがとうございます。
なるほどです。今、試せる環境がありませんので、週明けに確認してみます。
 
oDoc.Content.PasteAndFormat (wdSingleCellText)
⬇︎
myWord.Selection.PasteAndFormat (wdSingleCellText)
 
投稿後、これでも一応できるにほできました。
 
word vbaはほぼ初めて書きましたが、見様見真似で、
ほぼスクラッチで書きました。ですので、完成度は
かなり低いものだったかもしれません。
 
にも関わらず、アドバイスありがとうございました。

回答
投稿日時: 21/07/23 13:01:15
投稿者: んなっと

Selectionを使うためにわざわざ別インスタンスを用意する。
どこかのWebサイトを少しは参考にしましたよね。どのサイトですか?

投稿日時: 21/07/23 22:36:49
投稿者: Asakazu6950

コピペではなくもともとはテキストの挿入でした。
selectionを使うことは想定していませんでしたので、
>Selectionを使うためにわざわざ別インスタンスを用意する。
ではないです。
 
特に参考にしたWebページはありません。
自分の感覚でなんとなくやっただけので、単なる私のスキル不足です。
 
>Selectionを使うためにわざわざ別インスタンスを用意する。
 
こうしないでもできるんだというのはたいへん勉強になりました。
 
どうもありがとうございました。
 
With myWordDoc.Tables(1)
    
        maxRow = .Rows.Count
    
        For i = 2 To maxRow
              
              If Len(.Cell(i, 2).Range.Text) > 2 Then
                 
         'もともとはこれ↓だったのですが、書式が保持されないので、
          '改良版としてCopyメソッドを使うために今の形を模索した。
                    oDoc.Content.InsertAfter Text:=.Cell(i, 2).Range.Text
 
              End If
              
    Next
        
End With