早上好,
我很困惑为什么尝试使用For Each循环遍历A列时为什么出现类型不匹配的情况。
Sub timeStart()
Dim s As Worksheet
Dim anchor As Range
Dim i As Variant
i = 2
Set s = Workbooks("ER911 CALLBACKS SHEET").Sheets("Time Log")
For Each i In s.Range("A:A")
If s.Cells(i, 1).Value = "" Then 'ERROR OCCURS HERE
s.Cells(i, 1) = Date
s.Cells(i, 1).Offset(0, 1) = InputBox("What is your name?")
s.Cells(i, 1).Offset(0, 2) = InputBox("What program are you calling on?")
s.Cells(i, 1).Offset(0, 3) = Time()
Exit For
End If
Next i
结束子
答案 0 :(得分:2)
您的问题在这里:
For Each i In s.Range("A:A")
在这种情况下,每个i
是一个Range对象,代表序列中的下一个单元格。
但是随后您尝试将范围对象用作s.Cells(i, 1)
中的行#。因此,您应该只使用您创建的范围对象:
For Each i In s.Range("A:A")
If i.Value = "" Then 'ERROR OCCURS HERE
i = Date
i.Offset(0, 1) = InputBox("What is your name?")
i.Offset(0, 2) = InputBox("What program are you calling on?")
i.Offset(0, 3) = Time()
Exit For
End If
Next i
正如Alex K所指出的那样,将i
最初定义为范围Dim i as Range
会更安全,然后确保始终正确使用i。然后,您将需要删除i = 2
行,因为这实际上会导致其他类型不匹配错误
另一个建议是将i
重命名为更容易理解的名称,因此从现在开始六个月后阅读此代码时,我会立即明白我的意思。
答案 1 :(得分:0)
只需:
For i = 1 to N ' N = whatever the last row you wish to be
If s.Cells(i, 1) = "" Then
...等等
或
Dim rX as range
For Each rX in s.Range("A:A") ' WARNING! there are too many cells here in the column, BTW
If rX = "" Then
...等等