VBA копирует строки на основе номера ячейки, получая ошибку с нецелыми числами

#excel #vba

#excel #vba

Вопрос:

У меня есть этот код для дублирования каждой строки на основе значения в столбце O (если оно находится между 1 и 50).

  If ((VInSertNum > 1) And VInSertNum < 50 And IsNumeric(VInSertNum)) Then
       Range(Cells(xRow, "B"), Cells(xRow, "O")).Copy
       Range(Cells(xRow   1, "B"), Cells(xRow   VInSertNum - 1, "O")).Select
       Selection.Insert Shift:=xlDown
       xRow = xRow   VInSertNum - 1
    End If
  

И я получаю ошибку в последней строке перед End, если для некоторых очень специфических нецелых сценариев. Если число равно 1,9 или выше до 2, оно создаст две строки и будет работать нормально. Но когда число меньше, например, 1.4 или меньше, оно продолжает пытаться дублировать эту строку до бесконечности. Что также странно, так это то, что такие числа, как 11.4 или 10.4 или 44.4, работают просто отлично.

Почему это работает для некоторых нецелых чисел, но не для других?

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

1. Очень смущен, почему вы вообще используете нецелые числа. Возможно, вам нужны WorksheetFunction.Round ваши числа.

2. Если VInSertNum , вероятно, объявлено As Integer , равно 1.4, округлено до 1, это означает, что xRow 1 - 1 = xRow

3. Данные взяты из заказов, и иногда клиенты могут заказать 1,4 случая. Спасибо FaneDuru, это имеет смысл.