我在Excel中使用VBA并且我正在使用一个函数来查找第一个空行然后添加一些值,之后我需要将单元格的地址传递给另一个函数但是使用下面的代码我得到了一个运行时错误。 firstEmptyRow是一个返回范围的函数,例如。 $A$280
。
Dim addCell as Range
'Find first empty row in the table
With firstEmptyRow
'Enter Values
.Value = taskID
.Offset(0, 1).Value = jobID
.Offset(0, 2).Value = jobName
.Offset(0, 6).Value = taskTypeID
.Offset(0, 8).Value = taskName
.Offset(0, 9).Value = desc
.Offset(0, 11).Value = estMins
.Offset(0, 13).Value = "No"
set addCell = .Address //Gives a runtime error
End With
保存单元格地址的正确方法是什么,以便将其传递给另一个函数?下面是firstEmptyRow的代码
Public Function firstEmptyRow() As Range 'Returns the first empty row in the Schedule sheet
Dim i, time As Long
Dim r As Range
Dim coltoSearch, lastRow As String
Dim sheet As Worksheet
Set sheet = Worksheets("Schedule")
time = GetTickCount
coltoSearch = "A"
For i = 3 To sheet.Range(coltoSearch & Rows.Count).End(xlUp).Row
Set r = sheet.Range(coltoSearch & i)
If Len(r.Value) = 0 Then
Set firstEmptyRow = sheet.Range(r.Address)
'r.Select
Exit For 'End the loop once the first empty row is found
End If
Next i
'Debug.Print "firstEmptyRow time: " & GetTickCount - time, , "ms"
End Function
答案 0 :(得分:8)
.Address
属性返回一个字符串,因此您需要像这样设置addCell
变量:
Set addCell = Worksheets("Schedule").Range(.Address)
答案 1 :(得分:0)
您不需要使用类似Set addCell = Worksheets("Schedule").Range(.Address)
的代码来使代码过于复杂,因为它确实使可读性变得有些困难。通常,尝试以下简单的操作:Set FirstEmptyRow = myCell
。然后可以将整个代码重写为:
Public Function FirstEmptyRow() As Range
Dim myCell As Range
Dim coltoSearch As String, lastRow As String
Dim wks As Worksheet
Set wks = Worksheets(1)
coltoSearch = "A"
Dim i As Long
For i = 3 To wks.Range(coltoSearch & Rows.Count).End(xlUp).Row
Set myCell = sheet.Range(coltoSearch & i)
If IsEmpty(myCell) Then
Set FirstEmptyRow = myCell
Exit For
End If
Next i
If i = 2 ^ 20 Then
MsgBox "No empty rows at all!"
Else
Set FirstEmptyRow = sheet.Range(coltoSearch & i + 1)
End If
End Function
代码的最后一部分确保,如果最后一行和第3行之前没有空单元格,则将给出下一个单元格作为答案。此外,它检查下一行是否不是Excel中的最后一行,如果是,则为MsgBox()
提供一些信息。
答案 2 :(得分:0)
我对vba完全是“菜鸟”,通过尝试对我来说似乎可以解决我遇到的问题的代码段和例程来学习。当我尝试由Vityata发布的代码时,遇到“ 运行时错误'424':必需对象 在以下位置:
Set myCell = Sheet.Range(coltoSearch & i)
Set FirstEmptyRow = Sheet.Range(coltoSearch & i + 1)
按如下所示更改stmts为我解决了错误:
Set myCell = wks.Range(coltoSearch & i)
Set FirstEmptyRow = wks.Range(coltoSearch & i + 1)
我还在最后一个End If和End Function语句之间添加了一个Debug.Print语句,以便在进行如下测试时可以快速看到结果:
End If
Debug.Print "The 1st empty cell address is "; coltoSearch & i
End Function
如果我违反了某些发布规则,请接受我的道歉。希望分享这些内容可以避免以后使用类似学习过程的其他人感到困惑。