Excel-VBA-搜索更新的或新的行并合并

时间:2018-07-06 18:15:45

标签: excel vba

我在和这个混蛋。我已经设法使这项新工作的文件处理部分自动化,以便为我的小组创建新的每日报告,但是最烦人的步骤是使用来自FTP的新转储来更新主文件。

这是我抄写/复制的代码和我自己写的一些东西的混合物,所以这是我所知道的一团糟。

这是破败。

  1. 我每天通过FTP接收4个文件,其中1个代表4种不同的状态
  2. 这些文件会自动存档,然后每个文件的最新版本是 重命名为两个字母的州名称(即IL.csv)并移至 新鲜的数据文件夹。
  3. 我在共享网络驱动器中有一个中间文件,需要 允许每天从每个州手动输入实际数据 自动合并所有更新值或新行所需的性能 步骤2中从文件中导入数据
  4. 我已经有一个查询和清除运行,它将4个合并 从步骤4到主工作簿的中间文件,我可以 从自动生成我的报告。

致死我的部分是弄清楚如何从日常文件中读取内容,评估中间文件并更新某些列(如果发生更改)并添加任何新行(前一天的活动)。

绝对知道,我的选择副本不正确或无法在下面工作,但我什至无法打开上部文件并从文件中进行选择才能正常工作,但我不断收到“对象在OldRange和NewRange上不支持此属性或方法。

Sub UpdateDataWithNew()

Dim ILmain As Workbook
Dim ILnew As Workbook
Dim data As Worksheet
Dim maintable As Worksheet
Dim OldRange As Integer
Dim NewRange As Integer
Dim ListOld As Range
Dim ListNew As Range
Dim x As Range
Dim y As Range


Workbooks.Open Filename:="C:\Users\adeno\Desktop\Test Load 
Files\Illinois.xlsm"
Workbooks.Open Filename:="C:\Users\adeno\Desktop\Today's FTP\IL.csv"
Set ILmain = Workbooks("Illinois.xlsm")
Set ILnew = Workbooks("IL.csv")
OldRange = ILmain.Range("A2", 
Worksheets("Sheet1").Range("A2").End(xlDown)).Rows.Count
NewRange = ILnew.Range("A2", 
Worksheets("Sheet1").Range("A2").End(xlDown)).Rows.Count

Set ListOld = Range("B2:B" & OldRange)
Set ListNew = Range("B2:B" & NewRange)

Set data = ILnew.Sheets("Sheet1")
Set maintable = ILmain.Sheets("Sheet1")


For Each x In ListOld
    Workbook.ILnew.Activate
    If Application.CountIf(ListB, x) = 0 Then
    Row.Copy
    Workbook.ILmain.Activate
    Row.End(x1Up).Select
    Cells.PasteSpecial
    End If
Next x

End Sub

1 个答案:

答案 0 :(得分:0)

使用Long代替Integer。在现代Excel中,可以很容易地最大化任何整数值(可能的行数大于整数可以容纳的行数)。

您的问题可能是如何设置Excel / VBA无法识别的参数的最后一行

'Original bad code
    OldRange = ILmain.Range("A2", Worksheets("Sheet1").Range("A2").End(xlDown)).Rows.Count

您只想获得最后一行,因为您在以下各行上设置了实际范围,然后考虑了标题行。

OldRange = ILmain.Worksheets("Sheet1").Range("A" & Rows.Count).End(xlUp).row

我使用xlUp是因为进入xlDown可能会在第一个空白单元格而不是最后一个填充的单元格之后停止(我想自己还没有测试过)。