Excel VBA: ошибка времени выполнения '13' Несоответствие типов при попытке циклически перебрать столбец - PullRequest
0 голосов
/ 28 августа 2018

Доброе утро всем,

Я озадачен, почему я получаю несоответствие типов при попытке перебрать столбец A с циклом For each.

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

End Sub

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Просто, просто:

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

... и т. Д.

0 голосов
/ 28 августа 2018

Ваша проблема здесь:

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 во что-то более понятное, поэтому, читая этот код через 6 месяцев, сразу становится ясно, что я представляю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...