创建宏以自动将数据从一个工作簿填充到另一个工作簿

时间:2016-04-21 15:25:56

标签: excel-vba macros vba excel

为了提供一些背景知识,我已经浏览了堆栈,试图找到解决问题的方法但是做得很短。

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

1 个答案:

答案 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;。