我有一张包含所有数据的主表。我“偷”了以下代码,将第二列包含特定文本字符串的所有行复制到另一张表中。
For Each r In Src.Range("B2:B" & LastRow)
If r.Value = "1. Early Season Visits" Then
If CopyRange Is Nothing Then
Set CopyRange = r.EntireRow
Else
Set CopyRange = Union(CopyRange, r.EntireRow)
End If
End If
Next r
If Not CopyRange Is Nothing Then
CopyRange.Copy Dst.Range("A1")
End If
End Sub
上面的格式有点乱,但你应该明白了。在我针对自己的具体情况进行调整后,它的效果与宣传的一样。它甚至试图延续条件格式规则 - 尽管我确实必须对所有这些规则进行细微调整才能使其正确,因为 Excel 做了一些相对引用的无用操作。
上述问题在于:
- 结果是静态的。如果我在主表中进行了更改,则这些更改不会在运行此代码的表中更新。必须有一种更好/不同的方法来执行此操作,以便在所有表中进行更新。
- 我预计,如果我通过再次运行代码手动更新,它将再次弄乱条件格式 - 这不是一个小的修复。
那么,有没有更好的方法来实现我想要实现的目标?如果有,那是什么?
答案1
您可以在每个单元格中插入公式而不是值
For Each r In Src.Range("A2:A" & LastRow)
If r.Value <> "9999999**" Then
Dst.Range("A" & r.row).Formula = "=Sheet6!A" & r.row
Dst.Range("B" & r.row).Formula = "=Sheet6!B" & r.row
...and so on...
End If
Next r
在回答您的问题时,我假设您知道将代码放在哪里以及问题是它的作用。
Dst.Range("A" & r.row).Formula = "=Sheet6!A" & r.row
当 r 循环遍历 Sheet6 中 A 列的所有单元格时,它将获取当前 r ( r.row
) 的行并将公式插入 Sheet7 的相应单元格中。因此,如果 r 是 Sheet6 中的第一个单元格 (A1),则 Sheet7 的 A1 单元格中将插入以下公式:=Sheet6!A1
并且 Sheet B1 将具有=Sheet6!B1
...等等...
有时,在将公式编码到宏中之前,先尝试手动插入公式会很有用,这样可以更好地了解它们应该是什么