Использование инструкции If приводит к ошибке несоответствия типа runtime-13

#vba #excel #runtime-error #type-mismatch

#vba #excel #ошибка времени выполнения #несоответствие типа

Вопрос:

 Private Sub CommandButton1_Click() ''Dim rCell As Range
Dim i As Long
Dim rNext As Range

'loop through the cells in column A of the source sheet
For Each rCell In Sheet4.Range("A3:U25")
'loop as many times as the value in column U of the source sheet
    For i = 1 To rCell.Offset(0, 23).Value
        'find the next empty cell to write to in the dest sheet
        Set rNext = Sheet12.Cells(Sheet12.Rows.Count, 1).End(xlUp).Offset(1, 0)
        'copy A and B from source to the dest sheet
        rCell.Resize(1, 23).Copy
        rNext.Resize(1, 1).PasteSpecial (xlPasteValues)
    Next i
Next rCell
End Sub
  
  1. Я получаю несоответствие типа runtime-13 в строке For i = 1 To rCell.Offset(0, 23).Value .
    Когда возникает ошибка, я нажимаю end, и все работает нормально. Не хочу нажимать end.
  2. В моей форме я использую инструкцию If =IF(E4>0,1,"") для получения необходимого 1. Если я удалю инструкцию If и вручную поставлю 1 на место, то она будет работать без ошибок.

Комментарии:

1. Можете ли вы добавить краткое описание того, чего вы пытаетесь достичь, чтобы было проще поместить ваш код в контекст?

Ответ №1:

Ошибка возникает из-за того, что конечный диапазон в вашем ЦИКЛЕ FOR не относится к типу LONG.

Если я правильно прочитал ваш второй пункт, я думаю, что ваша инструкция IF отключена. Вместо =IF(E4> 0,1,»») ЛОЖНЫЕ критерии IF должны быть числовыми (например, =IF(E4>0,1,2).

Вы можете проверить, поместив следующую инструкцию над проблемой цикла FOR:

 Debug.Assert IsNumeric(rCell.Offset(0, 23).Value)
  

Это остановит выполнение кода, и вы можете поместить это в немедленное окно, чтобы увидеть, какое значение и местоположение рассматриваемой ячейки:

 ? rCell.Offset(0, 23).Value
? rCell.Offset(0, 23).Column
? rCell.Offset(0, 23).Row
  

Ответ №2:

Хорошо, я устранил проблему:

=IF(E4>0,1,"") должно быть =IF(E4>0,1,0)

Не удается найти пробел, должно быть 1 или 0. или числовое значение, как вы сказали. Достаточно просто. Спасибо за помощь. Даже этого не видел.