将数据传输到固定布局时,请考虑空行

我上个星期一直在做这个数据传输项目,我发现了最后一个问题。 我有一个名为ALPHA的模板中的以下代码。 这个macros在后台打开4个工作簿(Location1,2,3,4),并复制特定的单元格并粘贴到ALPHA中。 目前它做了以下工作:

它将数据粘贴到C,F,I和L中的下一个空行中,如图所示

Α

问题并不是所有的testing(位置文件)都有第6个数据,所以如果一个单元格留空,下一次testing的第二个结果数据在Row1中应该在Row2中。 发生这种情况是因为如果图片中的C8是空白的,那么代码将粘贴下一个结果,并将数据向上移动一次。 我需要代码find下一个空行,但只有当空行在不同的部分(标签ROW1,ROW2等),我该怎么做? 谢谢。

注意:图片中位置标签下的值来自每个“位置”工作簿

码:

Sub DataTransfer() Const FPATH As String = "C:\Users\bsmallwood\Desktop\FRF_Location_Data\" Application.ScreenUpdating = False Dim wb As Workbook Dim shtAlpha As Worksheet 'Template Dim locs, loc Dim rngDest As Range locs = Array("location1.xlsm", "location2.xlsm", _ "location3.xlsm", "location4.xlsm") Set shtAlpha = Workbooks("FRF_Data_Sheet_Template.xlsm").Sheets("DataInput") 'set the first data block destination Set rngDest = shtAlpha.Cells(Rows.Count, "C").End(xlUp).Offset(1, 0).Resize(5, 3) For Each loc In locs Set wb = Workbooks.Open(FileName:=FPATH & loc, ReadOnly:=True) rngDest.Value = wb.Sheets("Data").Range("I3:K7").Value wb.Close False Set rngDest = rngDest.Offset(0, 3) 'move over to the right 3 cols Next loc Application.ScreenUpdating = True End Sub 

您可以使用公式来计算下一个起点。 在你的情况下,你的部分从第4,9,14,19等行开始,所以你可以使用下面的公式:

 intLast = Cells(Rows.Count, "C").End(xlUp).Row intNext = intLast + 5 - (intLast + 1) Mod 5 

这将把你的最后一行,碰到下一节的开始。 例如:

 ╔═════════╦═════════╗ ║ intLast ║ intNext ║ ╠═════════╬═════════╣ ║ 0 ║ 4 ║ ║ 1 ║ 4 ║ ║ 2 ║ 4 ║ ║ 3 ║ 4 ║ ║ 4 ║ 9 ║ ║ 5 ║ 9 ║ ║ 6 ║ 9 ║ ║ 7 ║ 9 ║ ║ 8 ║ 9 ║ ║ 9 ║ 14 ║ ║ 10 ║ 14 ║ ║ 11 ║ 14 ║ ║ ... ║ ... ║ ╚═════════╩═════════╝ 

编辑 ,关于评论:

所以,在你的代码中,你需要改变:

 shtAlpha.Cells(Rows.Count, "C").End(xlUp).Offset(1, 0).Resize(5, 3) 

至:

 intLast = shtAlpha.Cells(Rows.Count, "C").End(xlUp).Row intNext = intLast + 5 - (intLast + 1) Mod 5 Set rngDest = shtAlpha.Cells(intNext, "C").Resize(5, 3) 

我不知道我是否在看这个权利,但是如果你的目标是我的想法,那么通过导入外部数据来查询其他电子表格就可以完成整个事情。 我正在使用Excel 2003,其中的过程将是(每个工作表4次):数据 – >导入外部数据 – >新build数据库查询 – > Excel文件。 从那里你会select你的工作表,并通过MS查询添加标准(删除空白等)。 然后指出你想要放置的数据。 (如果在4个查询中包含列标题,则分别来自屏幕截图C3,F3,I3,L3)。 设置数据范围属性以在打开时刷新。 如果我跟着你,这实际上完全没有任何macros的相同的事情。