【问题标题】:Copy row from excel worksheet to another if no match如果不匹配,则将行从 excel 工作表复制到另一个
【发布时间】:2013-04-04 20:02:55
【问题描述】:

我有一个从 SharePoint 列表填充的 Excel 工作表(“所有文档”),但也有一些包含公式的列。我在同一个工作簿(“原始”)中有另一个工作表,其中包含列表项的原始值。我需要比较这两个工作表,如果“所有文档”中的 A 列中的值在“原始”中的 A 列中不存在,则需要将该行复制到“原始”工作表中。它必须作为值粘贴。我搜索了许多论坛并尝试了许多建议,但都没有奏效。这是我最近的尝试。任何帮助将不胜感激!

Dim x As Long, y As Long, a As Long
Dim b As String
Dim rFound As Range
Dim TargetRange As Range
x = Worksheets("All Documents").Range("A" & Rows.Count).End(xlUp).Row
For a = 2 To x
    y = Worksheets("Original").Range("A" & Rows.Count).End(xlUp).Row
    b = Worksheets("All Documents").Range("A" & a)
    If a > y Then Exit For
    With Worksheets("Original").Range("A:A")
        Set rFound = .Find(b, LookIn:=xlValues)
        If rFound Is Nothing Then
           TargetRange = Worksheets("Original"1).Cells(Worksheets("Original").Rows(y + 1))
           Worksheets("All Documents").Rows(a).Copy
           TargetRange.PasteSpecial xlPasteValues
        End If
    End With
Next a

【问题讨论】:

  • 您的代码有什么问题?
  • 立即引起我注意的是这个TargetRange = Worksheets("Original"1)... 应该是Set TargetRange = Worksheets("Original"1).... 就像@CAPSLOCK 提到的那样休息,让我们知道代码的哪一部分不起作用。

标签: excel vba


【解决方案1】:

三件事,

  1. 要设置范围,您需要:

    Set TargetRange = Worksheets("Original").Rows(y + 1)
    
  2. 检查工作表是"Original"1 还是"Original"

  3. 通过以下方式改进复制您的价值观:

    Worksheets("Original").Rows(y + 1).Value = _
      Worksheets("All Documents").Rows(a).Value
    

【讨论】:

  • 感谢您的 cmets。 (“原始”1)中的 1 是我复制代码时的拼写错误。我在上面的步骤 3 中尝试了建议,但出现运行时错误“9”:下标超出范围。 y = 667 的值,即“原始”中的行数。 a = 104 的值。“所有文档”中有 730 行。我再次尝试并得到运行时错误'5':无效的过程调用或参数。我确认目标表和定义的表都命名为“原始”。源工作表名为“All Documents”,但定义的表为“ALLDocuments”。是这个问题吗?
  • 立即尝试。将一行复制到一行,您应该不需要单元格功能。
  • 成功了!谢谢!!很抱歉延迟回复。这是众多项目之一。
猜你喜欢
  • 1970-01-01
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
  • 2015-04-02
  • 1970-01-01
  • 2018-09-22
  • 1970-01-01
相关资源
最近更新 更多