【问题标题】:Can I get Range from ReferenceType in VBA?我可以从 VBA 中的 ReferenceType 获取范围吗?
【发布时间】:2022-12-09 04:53:43
【问题描述】:

我正在尝试制作一个 makro,将表格从生成的文档复制到现有文档的章节中。使用这个问题Getting the headings from a Word document 的公认答案,我设法找到了我想复制表格的章节。问题是 makro 通过 GetCrossReferenceItems 访问标题。返回值保存在一个 Variance astrHeadings 中。

看来我需要一个带有章节开始和结束的 Range 对象来添加表格。我可以从 Variance astrHeadings 开始获取范围吗?

【问题讨论】:

  • 您可能需要从找到的参考搜索到下一个标题类型(可能在同一标题级别?)。那会给你一个范围。然后你可以枚举范围内的表。
  • 查找表格的标题非常简单。而且,如果目标标题与源标题具有相同的标题级别和文本,那么找到正确的标题很简单。如果在该标题下还有其他内容,则在新标题下找到放置正在复制的表的位置并不那么简单。因此,问题就变成了如何在目标标题下确定放置表格的精确位置。您是否有要替换的表格、书签或其他一些可供代码用作参考点的识别功能?
  • 感谢您的 cmets!是的,实际上我想更新现有的表,这样可能更容易查找它们并在同一范围内创建新表。用 Table 对象做事似乎更容易——似乎至少有一些文档。是我还是 VBA 文档非常简短?
  • 在这种情况下,就会出现标题是否完全相关的问题。例如,如果它始终是源文档中的一个特定表(例如表 4),而目标文档中的另一个特定表(例如表 5),则只需要知道它在每个表中。
  • 嗯,我之前尝试过 iterate-tables-approach 但我遇到了表格问题,可能它们有点损坏,因为它生成的表格包含合并的单元格。

标签: vba ms-word


【解决方案1】:

例如,假设只有目标文档打开,源文档中的表 2 将替换目标文档中的表 1:

Sub XferTbl()
Application.ScreenUpdating = False
Dim DocSrc As Document, RngSrc As Range
Dim DocTgt As Document, RngTgt As Range
Set DocTgt = ActiveDocument
With Application.Dialogs(wdDialogFileOpen)
  If .Show = -1 Then
    .AddToMru = False
    .ReadOnly = True
    .Visible = False
    .Update
    Set DocSrc = ActiveDocument
  End If
End With
If DocSrc Is Nothing Then Exit Sub
Set RngSrc = DocSrc.Tables(2).Range
Set RngTgt = DocTgt.Tables(1).Range
With RngTgt
  .Tables(1).Range.Delete
  .FormattedText = RngSrc.FormattedText
End With
DocSrc.Close SaveChanges:=False
Application.ScreenUpdating = True
End Sub

如果您只想从特定单元格传输数据,请参见,例如:https://www.msofficeforums.com/word-vba/21403-copy-table-content-between-documents.html

【讨论】:

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