VBA - 从新文件更新主文件

时间:2017-01-05 16:03:46

标签: excel vba excel-vba merge

我有一个主文件,用于监控我公司的出货进度。我每周更新一次,包括现有货物的进度(已存在于主文件中的货物)和输入的新货物。这些更新以更新表的形式出现,其格式与主文件相同。我已经自动输入新的货物,但我仍然坚持如何更新现有的货运进度。

目前,我根据货件参考号手动执行vlookup。这很痛苦,因为有多个出货进度列,我必须遍历每个新输入以删除vlookup公式。

FOR EXAMPlE:货件参考在“C”栏中,货件提取在“AG”栏中,发货的货物在“AH”栏中,货物到达在“AI”栏中......依此类推。在主表中我可能有参考编号和取件日期。更新表可能包含此货件的发货日期。我想把发货日期复制到这批货的主文件中。

我基本上想要在主文件的每一列中搜索空白,并根据货件参考从更新文件中复制此数据。我无法复制和浏览主文件数据,因为我在上周手动添加了大量数据,更新后的文件可能没有或同意。

感谢您的帮助

请参阅我的尝试代码:

Sub Eupdatedates()
Dim lr As Long, rw As Long, extRNG As Range
Set wb = Workbooks("masterfile.xlsm")
Set ws = wb.Sheets("RawDATA")
lastRow = ws.Range("B" & ws.Rows.Count).End(xlUp).Row


Set extRNG = Workbooks("updatefile.csv").Worksheets("report").Range("C:AL")


For i = 33 To 38 ' columns which contain dates that need updating


    ws.Range("$A$2:$CV$" & lastRow).AutoFilter field:=i, Criteria1:="=" 'filter out cells containing data



    lastRow = ws.Range("B" & ws.Rows.Count).End(xlUp).Row ' find last row after filtering
    firstRow = Range("Cells(2,i): Column(i)" &        Rows.Count).Cells.SpecialCells(xlCellTypeBlanks).Row ' indentify first row after filtering
    For rw = firstRow To lastRow ' loop through each each empty row cell and perform a vlookup to the update file
        Cells(rw, i) = Application.VLookup(Cells(rw, i), extRNG, i - 2,  False)
    Next rw

Next i



End Sub

我收到错误“Range(”Cells(2,i):Column(i)“我想我已经在线查看,似乎找不到在for循环中定义范围的方法。我是新的对VBA来说有很多理由可以弥补。任何想法都会非常感激!!

1 个答案:

答案 0 :(得分:0)

这是VBA的工作。我过去做过类似的事情并使用VBA来完成任务,但如果没有工作簿放在我面前,我就无法编写代码。作为指针,我通常从一张大纸张开始,然后在开始编码之前以逻辑步骤写出过程,例如。

  • 有多少行? (我想知道什么时候停止)
  • 更新表在哪里?它叫什么?
  • 从第一行开始(行号= 1)
  • 什么是货件参考(船舶参考)?
  • 选择单元格(行号,感兴趣的列数)
  • 是空白吗?是 - 根据发货和更新在更新表中找到相应的值,否 - 转到下一个感兴趣的列
  • 此行没有更多感兴趣的列? - 移至下一行(行号+1)