【问题标题】:Macro to Count Rows in One Table and Add that # Rows in Second Table宏来计算一个表中的行并在第二个表中添加 # 行
【发布时间】:2018-08-21 18:54:22
【问题描述】:

我有一个包含许多表格的 word 文档。 我正在尝试构建一个宏来计算 Table1 中的行数,将该数字存储为变量:[n_rows],然后将 [n_rows] 插入 Table7。 我正在使用书签,以防用户添加新表,但我对仅使用 ActiveDocument 表或其他什么的想法持开放态度。 我在代码的 .Variables 行上收到“无效或不合格的参考”(见下文)。 救命!

Sub CountRows()
'
'   CountRows
'
'
If ActiveDocument.Bookmarks.Exists("Objectives") = True Then
ActiveDocument.Bookmarks.Item("Objectives").Select
.Variables("numrows").Value = Selection.Tables(1).Rows.Count
End If
Selection.GoTo What:=wdGoToBookmark, Name:="LogFrameSO"
Selection.InsertRowsBelow [NumRows]
End Sub

【问题讨论】:

  • 您收到错误消息,因为您的 .Variables 没有限定符。我假设你的意思是ActiveDocument.Variables。修复它,您的代码将运行而不会出现错误。

标签: vba count ms-word row


【解决方案1】:

如果您要使用如下代码:

.Variables("numrows").Value

  1. 必须存在名为“numrows”的文档变量;和

  2. 对于您现有的代码,您需要在两个实例中将其引用为 ActiveDocument.Variables("numrows").Value。

试试:

Sub AddRows()
Application.ScreenUpdating = False
Dim r As Long, i As Long
With ActiveDocument
  If .Bookmarks.Exists("Objectives") Then
    r = .Bookmarks("Objectives").Range.Tables(1).Rows.Count
  End If
  If .Bookmarks.Exists("LogFrameSO") Then
    With .Bookmarks("LogFrameSO").Range.Tables(1).Rows
      For i = 1 To r
        .Add
      Next
    End With
  End If
End With
Application.ScreenUpdating = True
End Sub

【讨论】:

  • 这段代码几乎完美,非常感谢!我看到的唯一奇怪的事情是它似乎增加了两倍的行数。这不会打扰我,除了我的第二个操作是将文本从目标表复制到 Logframe 表的第二个操作也将文本复制了两次。似乎目标中存在多少行,这就是复制文本的次数。
  • 您的原始帖子表明您希望向 LogFrameSO 表添加与 Objectives 表的行数一样多的行;不要为这两个表提供与 Objectives 表相同的行数。你确定不是后者吗?
  • 最初我只是想添加行数。但是,如果 Objectives 有 2 行,而 LogFrame 有 4 行,那么您提供的代码会向 Logframe 添加 8 行,而不是 4 行。所以我现在应该总共有 6 行,我有 10 行。一些额外的行,除了现在我的其他代码只是一遍又一遍地复制文本,直到它填满所有行。
  • 除非您的书签都在 same 表中,或者 Objectives 书签跨越多个表并且正在处理的不是错误的表,否则不可能代码按照你描述的去做。
猜你喜欢
  • 2012-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多