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:UsersadenoDesktopTest Load 
FilesIllinois.xlsm"
Workbooks.Open Filename:="C:UsersadenoDesktopToday's FTPIL.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

使用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可能会在第一个空白单元格停止,而不是在最后一个填充单元格之后停止(我认为,我自己没有测试过(。

最新更新