2016-12-14 1 views
0

このコードを実行して、コード内に定義されている2つのセルの間でExcelからセルを選択し、特定のブックマークの場所に貼り付けます。しかし、これまでコードを実行すると、 "start_of_text"、 "end_of_text"、 "Start_of_table"、 "End_of_table"の間の最初のセルで動作しますが、2番目のtextemarke.pastespecial(xlPasteall) 'コマンドが失敗しました。ExcelからExcelへのループをコピーして、コマンドエラーが発生する

誰もが何か提案がありますか?

Dim rownum As Integer 
    Dim colnum As Integer 
    Dim startrow As Integer 
    Dim endrow As Integer 
    Dim textmarke 

    rownum = 1 
    colnum = 2 

' Filtering for T1 line 

    ThisWorkbook.Worksheets("Template-Referenz-Produkte").Columns("A:A").AutoFilter Field:=1, Criteria1:="=<T1 Line>" _ 
    , Operator:=xlOr 


    ' Find eveything between start of text and end of text 
    With ThisWorkbook.Worksheets("Template-Referenz-Produkte") 
    For rownum = 1 To 10000 
     Do 
     If .Cells(rownum, 2).Value = "Start_of_text" Then 
      startrow = rownum + 1 
      End If 
      rownum = rownum + 1 

     If (rownum > 10000) Then Exit For 

     Loop Until .Cells(rownum, 2).Value = "End_of_text" 
     endrow = rownum - 1 

     'Select everything from start of text to end of text 
     ThisWorkbook.Worksheets("Template-Referenz-Produkte").Range("B" & startrow & ":B" & endrow).Copy 

     'Paste description from excel sheet 
     Set textmarke = doc.Bookmarks("INSERT_T1_LINE_reference_TABLE").Range 
     textmarke.PasteSpecial (xlPasteAll) 
     textmarke.Style = "Heading 4" 
     doc.Bookmarks.Add "INSERT_T1_LINE_reference_TABLE", textmarke 'Set the text marker on this specific range. 

    ' Find everything between start of table and end of table 
     Do 
      If .Cells(rownum, 2).Value = "Start_of_table" Then 
      startrow = rownum + 1 
      End If 
      rownum = rownum + 1 

     If (rownum > 10000) Then Exit For 

     Loop Until .Cells(rownum, 2).Value = "End_of_table" 
     endrow = rownum - 1 

     'Select everything from start of table to end of table 
     ThisWorkbook.Worksheets("Template-Referenz-Produkte").Range("B" & startrow & ":E" & endrow).Copy 

     'Paste description from excel sheet 
     Set textmarke = doc.Bookmarks("INSERT_T1_LINE_reference_TABLE").Range 
     textmarke.PasteSpecial (xlPasteAll) 
     doc.Bookmarks.Add "INSERT_T1_LINE_reference_TABLE", textmarke 'Set the text marker on this specific range. 

    Next rownum 
    End With 
+0

を、私はこのエラーの確認していないが、なぜあなたは同じ 'Bookmark'に貼り付けていますか?最初のループは列Bをコピーし、2番目のループは列B:Eをコピーするので、ループも冗長に見えます。なぜ両方が必要なのか説明できますか? –

+0

私は最初のペーストを見出しとしてフォーマットし、2番目のペーストをテーブルとしてフォーマットしたいと思っています。これを行う方法は他にありませんでした。ブックマークを使用すると、いくつのテーブルが貼り付けられるのか分からず、同じ名前の新しいブックマークを追加することが最も簡単な方法でした。 – Max

+0

私は下記の答えを試しましたか?それは動作しましたか? –

答えて

0

代わりのtextMarke.PasteSpecialあなたは試みることがあります。

textMarke.Select 
doc.Parent.CommandBars.ExecuteMso "PasteExcelTableSourceFormatting" 
+0

私はこの解決策を試しましたが、指示どおりに蛇腹の代わりにテーブルを貼り付けました。 – Max

+0

他の解決方法はありますか? – Max

+0

まあ、私はあなたが別のブックマークの各テーブルを必要と思う。あなたが提供したコードのように、それは1つの名前のブックマークだけを見ます。最初のテーブルをブックマークに貼り付けるための他の解決策が必要です。後続のテーブルには異なるWord Range(ブックマークではありません)を割り当てます。 –

関連する問題