Использование оператора If приводит к ошибке несоответствия типов во время выполнения-13 - PullRequest
0 голосов
/ 08 мая 2011
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. Я получаю несоответствие типов во время выполнения-13 в строке For i = 1 To rCell.Offset(0, 23).Value. Когда это ошибки, я нажимаю конец, и он работает нормально. Не хочу нажимать кнопку конца.
  2. В своей форме я использую оператор If =IF(E4>0,1,"") для получения необходимого 1. Если я удаляю оператор If и вручную ставлю 1 на место, то он работает без ошибок.

Ответы [ 2 ]

2 голосов
/ 08 мая 2011

Ошибка возникает из-за того, что конечный диапазон в вашем цикле FOR не является типом LONG.

Если я правильно читаю ваш второй пункт, я думаю, что ваше утверждение ЕСЛИ неверно.Вместо = IF (E4> 0,1, "") критерии FALSE для IF должны быть числовыми (например, = IF (E4> 0,1, 2 ).

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

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

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

? rCell.Offset(0, 23).Value
? rCell.Offset(0, 23).Column
? rCell.Offset(0, 23).Row
0 голосов
/ 08 мая 2011

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

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

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

...