Excel VBA:试图遍历列时运行时错误“ 13”类型不匹配

时间:2018-08-28 16:32:27

标签: vba

早上好,

我很困惑为什么尝试使用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

结束子

2 个答案:

答案 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

...等等