VBA匹配和工作表之间复制单元格值

VBA匹配和工作表之间复制单元格值

问题描述:

我有两张工作表,一个标记为“Assignments”,另一个标记为“备份”。我试图实现的是将“分配”信息复制到“备份”以允许输入新数据。但是,一旦复制到“备份”并且新信息被提供给“分配”,我正在循环遍历“备份”列A中的每个项目,并将相邻单元格(B列)复制到相应的单元格值在“作业”中找到。VBA匹配和工作表之间复制单元格值

到目前为止,这是我,但我不返回任何结果可行代码:

Option Explicit 
Sub Match() 
Dim RNG As Range 
Dim RI As Range 
Dim WS As Worksheet 
Dim f As Range 
Set WS = ActiveWorkbook.Sheets("Assignments") 
Set RNG = Sheets("Assignments Backup").Range("A2:A400") 
For Each RI In RNG 

With WS 
    'RI.Select 

    Set f = .Columns(1).SpecialCells(xlCellTypeConstants).Find(What:=Cells(Target.Row, 1), LookIn:=xlFormulas, LookAt:=xlWhole) '<--| try finding "Emp #" from Assignments sheet changed cell row column B in referenced sheet ("i.e. "Checklist") column "A" cells not blank cells 

     If f Is Nothing Then '<--| if "Emp #" match not found 



      'MsgBox "I couldn't find " & Cells(Target.Row, 1).Value & " in worksheet 'Checklist'" 
     Else ' <-- if "Emp #" match found 
      .Range("F:F").Rows(f.Row).Value = Range("F:F").Rows(Target.Row).Value '<--| paste "Assigmnents" sheet changed cell row columns "AA:AF" content in corresponiding columns of referenced sheet ("i.e. "Checklist") row where "Emp #" match was found 
     End If 

     End With 
     Next 


End Sub 

对于延迟道歉,我已经上传的示例文件到我的谷歌驱动器。 [https://drive.google.com/open?id=0B0jgh8FwPVvkWk40TEczYVFjX0k][1]

正如您会注意到列B包含两张表之间的不同数据。但是,如上所述,我希望备份中B列的信息根据列A中的数据替换分配B列中的内容。我还包括下面的代码。

编辑 我更新了上面的代码,因为我意识到我没有发布正确的代码,我最初尝试使用。

+0

你可以在之前和之后发布示例数据(电子表格图像)吗? – 0m3r

+0

'对于RNG中的每个RI',则使用'Target.Row' ... ...您的变量名称会令人困惑/困惑。在请求任何进一步帮助之前,请使用'Option Explicit'并验证您的变量是否已正确声明。 –

+0

我尝试过使用'Option Explicit',但它没有解决问题。 –

我亲爱的朋友,你的“代码”是一团糟 - 这是一个非常有礼貌的方式。我花了半个小时才把它清理干净。但那只是为了让问题可见。

Sub MatchEntries() 

    Dim WsA As Worksheet      ' Worksheet "Assignments" 
    Dim WsB As Worksheet      ' Worksheet "Assignments Backup" 
    Dim WsC As Worksheet      ' Worksheet "Checklist" 
    Dim Cell As Range       ' Cells in RngA 
    Dim Fnd As Range       ' Find match 
    Dim R As Long, C As Long     ' row and column 

    With ActiveWorkbook 
     Set WsA = .Worksheets("Assignments") 
     Set WsB = .Worksheets("Assignments Backup") 
     Set WsC = .Worksheets("Checklist") 
    End With 

    For Each Cell In WsB.Range("A2:A400") 
     Set Fnd = WsC.Columns(1).Find(What:=Cell.Value, LookIn:=xlFormulas, LookAt:=xlWhole) 
        ' <--| try finding "Emp #" from Assignments sheet changed cell row column B 
        ' in referenced sheet ("i.e. "Checklist") column "A" cells not blank cells 

     If Fnd Is Nothing Then '<--| if "Emp #" match not found 
      MsgBox "I couldn't find " & Cell.Value & " in worksheet 'Checklist'" 

     Else ' <-- if "Emp #" match found 
      R = Fnd.Row 
      For C = 27 To 32    ' columns AA to AF 
       WsA.Cells(R, C).Value = WsC.Cells(R, C).Value 
      Next C 
'   .Range("Fnd:Fnd").Rows(Fnd.Row).Value = Range("Fnd:Fnd").Rows(Target.Row).Value 
      ' <--| paste "Assigmnents" sheet changed cell row columns "AA:AF" content 
      ' in corresponiding columns of referenced sheet ("i.e. "Checklist") row 
      ' where "Emp #" match was found 
     End If 

    Next Cell 
End Sub 

首先,不要打电话给你的子“匹配”。 Match是一个工作表函数,并且不会告诉Excel在遇到“您的”名称选择时将执行什么操作。

其次,你似乎有3张。所以,我宣布3张。从你的文章中无法判断这个假设是否正确,但我相信你可以看到逻辑。另外,一旦你有这么多的变量,你将需要一个有点想象力的名字。你不能打电话给你所有的8个儿子John1,John2,John3等等。同样的道理,我命名了你的一个范围Cell和另一个Fnd。你将能够通过他们的名字来区分他们。

现在您可以看到您正在查看“备份”表(列表WsB)A列中的所有单元格。这看起来不是一个好主意,因为可能会有很多空白单元格。匹配将为他们找到。我冒昧地假设你正在查看清单表。如果这是错误的,现在很容易更改工作表或列。

如果找到匹配项,您想要做某件事。我无法弄清楚你想做什么,但是我在那里写了代码,这些代码应该很容易理解和修改,以便它能够实现你真正想要的。