#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
- Я получаю несоответствие типа runtime-13 в строке
For i = 1 To rCell.Offset(0, 23).Value
.
Когда возникает ошибка, я нажимаю end, и все работает нормально. Не хочу нажимать end. - В моей форме я использую инструкцию 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. или числовое значение, как вы сказали. Достаточно просто. Спасибо за помощь. Даже этого не видел.