Sub gen()
Dim arr(1 To 20) As Integer, i As Integer, ir As Integer, ich As Integer
Randomize
Do
For i = 1 To 19
arr(i) = Fix(90 * Rnd + 10)
ir = ir + arr(i)
Next
ich = 1000 - ir
If ich < 10 Or ich > 100 Then
Erase arr
ich = 0
ir = 0
Else
arr(20) = ich
Exit Do
End If
Loop
For i = 1 To 20
Cells(i, 8).Value = arr(i)
Next
End Sub
Не совсем понятно что в итоге вы ожидаете Но как вариант, можно сделать булевою глобальную переменную, для каждого комбобокса И если изменили один комбобокс, то второй раз его не изменять - т.е. в начале события Cahnge - проверять значение переменной. Если оно = True, то Exit Sub, иначе выполнить алгоритм и в конце в проверяемую переменную записать True Но тут нужно ещё продумать в какой момент сбрасывать значение этой переменной на False
в моем никак, я просто показал как можно работать в ограниченной области и как распространять область по четырём направлениям в трех циклах (второй цикл просто ищет край области)
Не знаю кто это И это моё мнение, можете переубедить меня Я считаю что "On Error GoTo" можно использовать только в особых случаях, когда мы именно ожидаем ошибку. Или симулируем Try Catch Во всех остальных случаях лучше избегать этого
Цитата
КошкаСофи написал: А как это в макросе реализовать ?
Это вам нужно самостоятельно разобраться. Если какой-то конкретный момент не получается или не ясен, то подскажем Можете посмотреть пример во вложении - там просто расширяется область, от точки "P"
Переработать концепцию вашей программы. У вас область расширяется бесконечно, во все стороны. Но область не может быть с координатами меньше 1 (не может быть ячейки(0, 0) )
Я бы рекомендовал вам сначала избавиться от On Error GoTo End_ - это очень порочная практика и она мешает вам определить причину ошибки. Затем определить рабочую область где у вас будет обрабатываться ячейки, добавив проверку, чтобы не выходить за пределы этой области. Далее, при расширении области чисел, "область проверки" расширять не квадратом, а постепенно во все 4 стороны (опять-таки не заходя за рабочую область)
И ещё рекомендую попытаться 4 последовательных цикла, впихнуть в три цикла вложенных в друга-друга (первый определяет стороны - соответственно нижнюю и верхнею границу для последующих циклов, второй ось X, третий ось Y)
Написал простенький скрипт, который ищет кратчайший путь от точки X до точки Y Может кому-то будет интересно
Файл Excel во вложении На выделенном диапазоне, в любом месте можем разместить точку X и точку Y. А так-же преграды, в виде точек "B" (цвет значения не имеет, ячейки потом закрасятся) Так-же есть две кнопки 1) Find a patch - найти путь 2) Clear - очищает диапазон (кроме значений X, Y, B)
UPD: исправил одну ошибку и добавил кнопку "Step by step" - показывает поиск пути шаг за шагом для наглядной демонстрации (кроме финального построения пути)
А так-как создавал такую=же тему на другом форуме, то бонусом сюда добавлю программу по решению судоку Она действительно сначала пытается решить судоку (до уровня поиска скрытых пар) и только потом перебирает все оставшиеся варианты Это можно сказать моя первая программка написанная на VBA - поэтому содержит не очень красивый код
Я наконец-то доделал "морской бой" на VBA, через UserForm И хочу поделиться с вами, своим творением Реализовал не всё что хотел, на пример разные правила игры, но довел классическую версию до играбельного состояния
Делал примерно месяц, в обед и после работы Критика приветствуется