将下一个空的多单元格范围指定给由函数返回的variables

我试图使用一个函数来返回一个大小为1 x 4的Range对象,使用工作表中的下一个空行,这样我就可以将值从一个范围传递到另一个范围的不同工作表上。 不幸的是,我似乎无法找出这一个。 我试图寻找答案,但我能find的是1单元解决scheme。

Private Function AssignNextRow(project As String) As Range Dim projectSheet As Worksheet Set projectSheet = Worksheets(project) Dim firstEmptyRow As Range Set firstEmptyRow = projectSheet.Range(Cells("A" & projectSheet.Rows.count) _ .End(xlUp).Offset(1, 0), Cells("D" & projectSheet.Rows.count).End(xlUp).Offset(1, 0)) AssignNextRow = firstEmptyRow End Function 

那么将Range设置为variables的最佳方法是什么?

编辑:

我已经修复了它将运行的代码,但是现在下一个工作表范围的开始会偏移到最后一个工作表范围结束时开始。 新的代码如下:

 Private Function AssignNextRow(project As String) As Range Dim projectSheet As Worksheet Set projectSheet = Worksheets(project) Dim firstEmptyRow As Range Set firstEmptyRow = projectSheet.Range("A" & projectSheet.Rows.count) _ .End(xlUp).Offset(1, 0).Resize(1, 4) Set AssignNextRow = firstEmptyRow End Function 

我不确定在哪里解决这个问题。

2ND编辑:

什么是“下一张”和“最后一张”呢? 您可能需要提供调用AssignNextRow()-Tim Williams的代码

 Private Sub DailyTransfer() Dim dailyRange As Variant dailyRange = Worksheets("Daily").Range("A3:D23").Value Dim x As Integer, y As Integer, z As Integer, projectName As String Dim entryDate As Date x = 1 y = 1 z = 1 For x = 1 To 20 projectName = dailyRange(x, 2) entryDate = dailyRange(x, 1) If projectName = "" Then Exit For If WkshtCheck(projectName) = False Then Call WkshtMake(projectName, entryDate) For y = 1 To 4 Dim emptyRow As Range Set emptyRow = AssignNextRow(projectName) emptyRow(1, z).Value = dailyRange(x, y) If y = 1 Then y = y + 1 z = z + 1 Next y Next x End Sub 

只要ColA总是有价值,就应该这样做

 Set firstEmptyRow = projectSheet.Range(Cells("A" & projectSheet.Rows.count) _ .End(xlUp).Offset(1, 0).Resize(1,4)