Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 将多个嵌套表格复制并粘贴到特定的Word表格单元格中_Excel_Vba_Ms Word - Fatal编程技术网

Excel 将多个嵌套表格复制并粘贴到特定的Word表格单元格中

Excel 将多个嵌套表格复制并粘贴到特定的Word表格单元格中,excel,vba,ms-word,Excel,Vba,Ms Word,我使用WordEditor在Outlook模板中创建了一个表,并计划将excel工作簿中的多个区域作为嵌套表复制和粘贴到此表的特定单元格中—其思想是每次将新表粘贴到此单元格中时,所有现有表都会被推离(我可以在以后的某一点上确定桌子的位置) 我打算使用书签来粘贴范围,但我不熟悉符号,很难在网上找到任何相关文档 Dim wdDoc As Word.Document Dim ws_sum, ws As Worksheet Dim tblSess As Word.Table ...... ......

我使用WordEditor在Outlook模板中创建了一个表,并计划将excel工作簿中的多个区域作为嵌套表复制和粘贴到此表的特定单元格中—其思想是每次将新表粘贴到此单元格中时,所有现有表都会被推离(我可以在以后的某一点上确定桌子的位置)

我打算使用书签来粘贴范围,但我不熟悉符号,很难在网上找到任何相关文档

Dim wdDoc As Word.Document
Dim ws_sum, ws As Worksheet
Dim tblSess As Word.Table
......

......
With ws_sum
    wdDoc.Bookmarks.Add Name:="tab", Range:=tblSess.cell(2, 1).Range
    .Range(.Cells(9, 3), .Cells(12, 7)).Copy
    wdDoc.Bookmarks("tab").Range.PasteAsNestedTable
    .Range(.Cells(24, 2), .Cells(31, 10)).Copy
    wdDoc.Bookmarks("tab").Range.PasteAsNestedTable
......
End With

我遇到的问题是,当前每次粘贴新的嵌套表时,它都会完全删除书签单元格的内容。我尝试通过将“Range:=tblSess.cell(2,1).Range”替换为“Range:=tblSess.cell(2,1).Range(0,0)来指定单元格的第一个条目'但这会在运行时引发错误。是否有其他方法可以做到这一点?

当然有多种方法可以做到这一点。在任何情况下,关键是

  • 确保单元格开头有一个空段落标记。这为下一次插入提供了一个返回的位置,这样它就不会嵌套在另一个粘贴的表中
  • 使用
    Range
    对象。我喜欢两个:一个作为单元格的开始,另一个作为粘贴目标
以下基于问题中代码的代码片段演示了:

Dim rngCellStart As Word.Range, rngTarget As Word.Range

Set rngTarget = tblSess.Cell(2, 1).Range
rngTarget.Collapse wdCollapseStart
Set rngCellStart = rngTarget.Duplicate

'put a paragraph mark before the table that is pasted
rngTarget.InsertBefore vbCr
'Move the target Range to leave out that paragraph
rngTarget.MoveStart wdCharacter, 1

'may no longer be needed... but could be used to mark
'the starting point of the cell as that is where it stays
'wdDoc.Bookmarks.Add Name:="tab", Range:=rngCellStart

.Range(.Cells(9, 3), .Cells(12, 7)).Copy
rngTarget.PasteAsNestedTable

'Following paste actions for additional tables.
'Could be put in a separate procedure and called in a loop
rngCellStart.InsertBefore vbCr
Set rngTarget = rngCellStart.Duplicate
rngTarget.Collapse wdCollapseEnd
.Range(.Cells(24, 2), .Cells(31, 10)).Copy
rngTarget.PasteAsNestedTable

解决这个问题的方法肯定不止一种,关键是

  • 确保单元格开头有一个空段落标记。这为下一次插入提供了一个返回的位置,这样它就不会嵌套在另一个粘贴的表中
  • 使用
    Range
    对象。我喜欢两个:一个作为单元格的开始,另一个作为粘贴目标
以下基于问题中代码的代码片段演示了:

Dim rngCellStart As Word.Range, rngTarget As Word.Range

Set rngTarget = tblSess.Cell(2, 1).Range
rngTarget.Collapse wdCollapseStart
Set rngCellStart = rngTarget.Duplicate

'put a paragraph mark before the table that is pasted
rngTarget.InsertBefore vbCr
'Move the target Range to leave out that paragraph
rngTarget.MoveStart wdCharacter, 1

'may no longer be needed... but could be used to mark
'the starting point of the cell as that is where it stays
'wdDoc.Bookmarks.Add Name:="tab", Range:=rngCellStart

.Range(.Cells(9, 3), .Cells(12, 7)).Copy
rngTarget.PasteAsNestedTable

'Following paste actions for additional tables.
'Could be put in a separate procedure and called in a loop
rngCellStart.InsertBefore vbCr
Set rngTarget = rngCellStart.Duplicate
rngTarget.Collapse wdCollapseEnd
.Range(.Cells(24, 2), .Cells(31, 10)).Copy
rngTarget.PasteAsNestedTable

Range(0,0)
在Word中不起作用(就像Excel中的
Cell(0,0)
一样)。
Range(1,1)
可能会做您想做的事情。我个人使用
Range.collapsestart
来到达单元格的开头。但这意味着声明并使用独立的
Range
对象(这不是一件坏事…)hi@Cindymister so
Range.Collaspe wdCollapseStart
确实允许我在单元格中粘贴多个表,但只有当我将以下表粘贴为
.paste
而不是
.PasteSpecial
(后者最终将第二个嵌套表粘贴到第一个嵌套表中,作为一个嵌套的嵌套表!)。前者的问题是,表不再嵌套并嵌入到主表中…您认为有解决方法吗?感谢确认-这给了我一个开始的位置。我已经发布了一个答案…
Range(0,0)
在Word中不起作用(比Excel中的
Cell(0,0)
更有效)。
Range(1,1)
可能会做你想做的事。就我个人而言,我使用
Range.collapsestart
到达单元格的开头。但这意味着声明并使用独立的
Range
对象(这不是一件坏事…)hi@Cindymister so
Range.Collaspe wdCollapseStart
确实允许我在单元格中粘贴多个表,但只有当我将下面的表粘贴为
.paste
而不是
.PasteSpecial
(后者最终将第二个嵌套表粘贴到第一个嵌套表中,作为一个嵌套的嵌套表!)。前者的问题是,该表不再嵌套,并嵌入到主表中…您认为有解决方法吗?感谢您的确认-这给了我一个开始的位置。我已经发布了一个答案。。。