VBA-从新文件更新主文件

VBA-从新文件更新主文件,vba,excel,merge,Vba,Excel,Merge,我有一个主文件,用于监控我公司的装运进度。我每周根据现有装运(已在主文件中的装运)的进度进行更新,并输入新装运。这些更新以更新表的形式出现,其格式与主文件相同。我已经自动输入了新的发货,但我一直在思考如何更新现有的发货进度 目前,我根据装运参考号手动执行vlookup。这是一个痛苦的问题,因为有多个装运进度列,我必须遍历每个新输入以删除vlookup公式 例如:装运参考在“C”列,装运提货在“AG”列,发运的装运在“AH”列,到达的装运在“AI”列。。等等在母版纸中,我可能有参考号和取货日期。更

我有一个主文件,用于监控我公司的装运进度。我每周根据现有装运(已在主文件中的装运)的进度进行更新,并输入新装运。这些更新以更新表的形式出现,其格式与主文件相同。我已经自动输入了新的发货,但我一直在思考如何更新现有的发货进度

目前,我根据装运参考号手动执行vlookup。这是一个痛苦的问题,因为有多个装运进度列,我必须遍历每个新输入以删除vlookup公式

例如:装运参考在“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

我得到了“范围”(单元格(2,I):列(I)的错误"我想我已经在网上查过了,似乎找不到一种方法来定义for循环中的范围。我对VBA很陌生,所以有很多地方需要补充。如果有任何想法,我将不胜感激!!

这是VBA的工作。我过去也做过类似的事情,并使用VBA来完成任务,但如果没有作为一个指针,我通常从一张大白纸开始,在开始编写代码之前,按逻辑步骤写出流程

  • 有多少行?(我想知道什么时候停)
  • 更新表在哪里?它叫什么
  • 从第一行开始(行号=1)
  • 什么是装运参考号(船号)
  • 选择单元格(行号、感兴趣的列号)
  • 是否为空?是-根据ship ref和update在更新表中查找相应的值,否-移动到下一个感兴趣的列
  • 此行没有更多感兴趣的列?-移动到下一行(行号+1)
  • 等等

您是否尝试编写VBA代码来解决此问题?不,我不确定从何处开始,以及什么是有效的方法。谢谢,开始您的工作,将主要任务划分为几个小任务,例如:1.搜索每列的空格;2.找到复制和粘贴主文件的方法;3.等等。然后对每个任务进行小规模的研究,并显示w你得到了什么。我不确定是否有解决这个问题的快速方法,但我现在已经在尝试的代码中分别对每个列单元格进行了编辑。谢谢你,Kyle,这是我一直在寻找的,因为我不确定是否有两行的答案。行数会有所不同,我将在执行宏时保持工作文件打开。我我曾经用我尝试过的代码编辑过这篇文章,但我有一点被卡住了。谢谢你的帮助。通过你的错误消息-检查你的引号在范围内的位置(“单元格(2,I):单元格(lastRow,I)”。在括号外构建范围字符串可能更有效,比如:|对于I=2到4 |奇怪=“$A$2:B”&CStr(I)| firstRow=Range(奇怪)|很抱歉,在这个回复中无法使用换行符,因此添加了|它们应该在哪里。-你在那里让我有点迷失了,Kyle!!我已经更改了代码以执行以下操作,尽管它仍然不起作用。现在,当我运行代码时,它不会执行任何简单的操作。Sub-ESourcedate().Worksheets(“report”).Range(“C:AL”)、Set wb=Workbooks(“masterfile.xlsm”)、Set ws=wb.Sheets(“RawDATA”)、lastrow=ws.Range(“C”&ws.Rows.Count).End(xlUp).行数从i=33到38,行数从r=3到lastrow,如果单元格(r,i).值=”然后是单元格(r,i).值=应用程序.VLookup(单元格(单元格(r,3),输出,i-2,False)如果△Next r△Next i△End Sub△表示换行符SHI SmC,则为△End。我上面的信息是突出显示该段代码中引号的位置,一个在括号内,一个在括号外。我不会在VBA中使用vlookup(甚至不确定是否可以),我只需将目标单元格中的文本设置为源单元格中的文本。除非:-激活源工作表-将相关行的所有源工作表值加载到变量中-激活目标电子表格-检查空值并从变量更新-.下一步-等等。。。