为了提供一些背景知识,我已经浏览了堆栈,试图找到解决问题的方法但是做得很短。
Using VBA to compare two excel workbooks
excel vba macro to match cells from two different workbooks and copy and paste accordingly
我要做的是确定两个工作簿中是否显示相同的数字,“工作簿A”和“工作簿B”。如果两个工作簿中都存在相同的数据,我希望将工作簿B中另一列的数据自动填充到工作簿A的某个列中。
关于工作簿B的警告是该文档将存在于SharePoint网站上。
工作簿A中的数据列是B.工作簿B中列的相同数据是C.
如果两个工作簿中的数字相同,我想从工作簿B中的M列复制数据,并将其放在工作簿A的J列中。
非常感谢任何帮助。
这是我能找到的唯一代码:
我对VBA技能不高,并且没有任何可用的代码。我能找到的最接近的代码如下:
Sub UpdateW2()
Dim w1 As Worksheet, w2 As Worksheet
Dim c As Range, FR As Long
Application.ScreenUpdating = False
Set w1 = Workbooks("4130 Sedgwick Activity Report 03212016_GT.xlsb").Worksheets("4130 Lincoln")
Set w2 = Workbooks("Test_Eaton Absence Detail Report 04-15-2016 (2)_GT.xlsx").Worksheets("Active Locations")
For Each c In w1.Range("B3", w1.Range("J" & Rows.Count).End(xlUp))
FR = 0
On Error Resume Next
FR = Application.Match(c, w2.Columns("A"), 0)
On Error GoTo 0
If FR <> 0 Then w2.Range("M" & FR).Value = c.Offset(, -3)
Next c
Application.ScreenUpdating = True
End Sub
答案 0 :(得分:0)
在您发布的代码中,有两行的组合会导致问题。
这一行...
For Each c In w1.Range("B3", w1.Range("J" & Rows.Count).End(xlUp))
...说要遍历范围内的所有细胞&#34; B3&#34;通过&#34; J&#34;某事。 &#34; B&#34;是工作表中的第二列。
这一行...
If FR <> 0 Then w2.Range("M" & FR).Value = c.Offset(, -3)
...说要从循环正在查看的单元格中向后取三列值并将其放入列#34; M&#34;其他工作簿中的工作表。如果从列&#34; B&#34;向后三列,则会出现错误。
在您的评论中,您只是说&#34;我想从工作簿B&#34;中的其他列中获取数据,但您不会说出哪一列。
如果&#34;另一列&#34;真的是三列,那么你至少需要改变这一行...
For Each c In w1.Range("B3", w1.Range("J" & Rows.Count).End(xlUp))
...到这一行...
For Each c In w1.Range("D3", w1.Range("J" & Rows.Count).End(xlUp))
如果&#34;另一列&#34;总是固定的(例如A列),那么你可以改变这一行...
If FR <> 0 Then w2.Range("M" & FR).Value = c.Offset(, -3)
...到这一行...
If FR <> 0 Then w2.Range("M" & FR).Value = w1.Range("A" & c.Row)
其中一项更改应该为您提供&#34;有效的代码&#34;。