Я делаю форму для расчета цены комнат, которые мы сдаем в аренду.Среди прочего эта стоимость основана на дате прибытия и отъезда.Вы можете увидеть скриншот формы ниже;- «Aankomst» (первая дата) означает «Прибытие» - «Vertrek» (вторая дата) означает «Отъезд»
Как видите, я добавил кнопки, чтобы соответственно уменьшить или увеличить даты.Я также убедился, что невозможные значения будут исправлены.Дата отъезда никогда не может быть равной или ниже даты прибытия.При попытке уменьшить дату отправления или увеличить дату прибытия это срабатывает, если неправильно.
При вводе значений вручную эта проверка не выполняетсяпроисходят.Немного поиска научило меня, что я могу сделать это с помощью макроса события изменения.
Я написал этот бит кода:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Address = "$B$5" And Range("$b$5").Value + 1 >= Range("$b$6").Value Then
Range("$b$6").Value = Range("$b$5").Value + 1
End If
If Target.Address = "$B$6" And Range("$b$6").Value - 1 <= Range("$b$5").Value Then
Range("$b$5").Value = Range("$b$6").Value - 1
End If
Application.ScreenUpdating = True
End Sub
B5 - это ячейка, содержащая дату прибытия, b6 - этоячейка, содержащая дату отъезда.При срабатывании этот макрос должен проверять, какая ячейка была изменена (b5 или b6) и есть ли arr.дата равна или выше, чем деп.Дата.И если это так, автоматически измените другую ячейку (ту, которая не была изменена вручную).
Теперь, когда я опускаю второй оператор if, он работает просто отлично.Если я опущу второе выражение if, оно также будет работать нормально.Когда оба оператора активны, он вызывает ошибки каждый раз.Я получаю сообщение «Недостаточно места в стеке» (перевод с голландского).
Я также пробовал этот код, используя регистр:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Range("b6").Value - 1 <= Range("b5").Value Then
Select Case Target.Address(0, 0)
Case "b5": Range("vertrek").Value = Range("aankomst").Value + 1
Case "b6": Range("aankomst").Value = Range("vertrek").Value - 1
End Select
End If
Application.ScreenUpdating = True
End Sub
... но также безуспешнота же ошибка.Когда я отлаживаю, я вижу, что дата действительно была изменена, если необходимо, поэтому я предполагаю, что каким-то образом создаю бесконечный цикл или что-то в этом роде, и это приводит к ошибке в Excel.
Кто-нибудь знает, где находится моя ошибка, или кто-то знаетдругого метода для достижения моей цели?