【问题标题】:Copy Table Rows From Word Document To Existing Document Table Specific Cell将表格行从 Word 文档复制到现有文档表格特定单元格
【发布时间】:2021-06-24 12:00:36
【问题描述】:

我正在寻找一个宏,它将内容从一个 word 文档中的表格复制到另一个现有 word 文档中的表格到特定单元格中。

从第 5 行开始,复制后面的所有行并将其粘贴到现有文档的第 5 行。

这可能吗?

enter image description here

Sub ExtractTable()

    Dim objTable As Word.Table
    Dim tbls As Word.Tables
    Dim objDoc As Document
    Dim objNewDoc As Document
    Dim objRange As Range

    Set objDoc = ActiveDocument
    Set tbls = objDoc.Tables
    Set objNewDoc = Documents.Add("C:\dcam\Setup Sheets\lineup-sheet-template.html")

    For Each objTable In tbls
        Set objRange = objDoc.Range(Start:=objTable.Cell(5, 1).Range.Start, _
            End:=objTable.Cell(25, 1).Range.End)
        objRange.Select
        Selection.Copy
    Next
 
    Set objRange = objNewDoc.Tables(1).Cell(5, 1).Range
    objRange.Collapse Direction:=wdCollapseEnd
    objRange.Paste
 
End Sub

【问题讨论】:

  • @xidgel 我不知道如何设置第 5 行到 rows.count 的范围,当我粘贴到现有文档时,它会将其放在第 2 列的第 5 行而不是第一列

标签: vba ms-word


【解决方案1】:

如果这些是目标中的空行,那么当您可以简单地使用 FormattedText 方法或 PasteAppendTable 方法将行添加到目标表中时,为什么它们会存在?

如果要复制的最后一行下方有某些内容,您可以简单地将目标表一分为二,然后使用上述任何一种方法将行添加到“顶部”目标表并在拆分处连接两个部分.

【讨论】:

    【解决方案2】:

    我已将 cmets 添加到您的代码中,以指明您需要真正思考自己在做什么以及为什么要做的地方。

    您还需要学习如何使用触手可及的研究工具 - 尤其是对象资源管理器和在线帮助。

    Sub ExtractTable()
    
        Dim objTable As Word.Table
        Dim tbls As Word.Tables
        Dim objDoc As Document
        Dim objNewDoc As Document
        Dim objRange As Range
    
        Set objDoc = ActiveDocument
        Set tbls = objDoc.Tables
        Set objNewDoc = Documents.Add("C:\dcam\Setup Sheets\lineup-sheet-template.html")
    
        'Why are you looping through all the tables?
        'If you do this only the last one will be available on the clipboard
        For Each objTable In tbls
            'Are you only copying the cells in the first column? Or, does the table only have one column?
    '        Set objRange = objDoc.Range(Start:=objTable.Cell(5, 1).Range.Start, _
    '            End:=objTable.Cell(25, 1).Range.End)
            Set objRange = objDoc.Range(Start:=objTable.Cell(5, 1).Range.Start, _
                End:=objTable.Cell(objTable.Rows.Count, objTable.Columns.Count).Range.End)
            'Why are you selecting the range when the Range has a Copy method?
    '        objRange.Select
    '        Selection.Copy
            objRange.Copy
        Next
     
        Set objRange = objNewDoc.Tables(1).Cell(5, 1).Range
        'Why are you collapsing the range to the end?
        'This will cause the paste to be in column 2 as the range is now positioned at the end of cell marker
    '    objRange.Collapse Direction:=wdCollapseEnd
    '    objRange.Paste
        objRange.PasteAppendTable
    End Sub
    

    【讨论】:

    • 我正在尝试选择从第 5 行到表末尾的所有行,但我仍然没有得到任何结果
    • @Mapleleaf - 正如已经向您指出的那样,您不应该尝试选择任何东西。上面的代码从第 5 行复制到表的末尾。
    • 我的前 4 行中有垂直合并的单元格,所以我认为它弄乱了范围。我收到运行时错误“91”:对象变量或未设置块变量
    【解决方案3】:
    Sub ExtractTable()
    
        Dim oTable As Word.Table
        Dim oDoc As Document
        Dim oNewDoc As Document
        Dim oRange As Range
    
        Set oDoc = ActiveDocument
        Set oNewDoc = Documents.Add("C:\dcam\Setup Sheets\lineup-sheet-template.html")
        Set oTable = oDoc.Tables(1)
    
        If oDoc.Tables.Count >= 1 Then
            With oTable
                Set oRange = oDoc.Range(Start:=oTable.Cell(5, 1).Range.Start, _
                    End:=oTable.Cell(oTable.Rows.Count, oTable.Columns.Count).Range.End)
                    oRange.Copy
            End With
        End If
     
        Set oRange = oNewDoc.Tables(1).Cell(5, 1).Range
        oRange.PasteAppendTable
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2014-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多