Добрый день! Для статистики, сделал форму для определения рельсовой цепи от расстояния. Все бы хорошо, но только первую цепь перегона упорно не хочет определять, оставляя пустоту. Определение идет через следующий код: [vba]
Код
i = 1 Do While Sheets("Перегоны").Cells(i, 3) <> 0 If Val(Sheets("Перегоны").Cells(i, 4)) < Val(s) And Sheets("Перегоны").Cells(i, 1) = peregon Then
rc = Sheets("Перегоны").Cells(i, 3) End If i = i + 1
Loop
[/vba] Данный кусок специально большими пропусками выделил в прилагаемом файле. Макрос для формы ALS.
Добрый день! Для статистики, сделал форму для определения рельсовой цепи от расстояния. Все бы хорошо, но только первую цепь перегона упорно не хочет определять, оставляя пустоту. Определение идет через следующий код: [vba]
Код
i = 1 Do While Sheets("Перегоны").Cells(i, 3) <> 0 If Val(Sheets("Перегоны").Cells(i, 4)) < Val(s) And Sheets("Перегоны").Cells(i, 1) = peregon Then
rc = Sheets("Перегоны").Cells(i, 3) End If i = i + 1
Loop
[/vba] Данный кусок специально большими пропусками выделил в прилагаемом файле. Макрос для формы ALS.Паштет
Нет. Не то. На листе "Перегоны" указано расстояние до границы рельсовой цепи от начальной станции перегона. В ходе заполнения формы ALS мы получаем расчетное расстояние местоположения состава, которое хранится в переменной s. Так вот, мы должны подставить соответствующее название рельсовой цепи из таблицы "Перегоны" столбец С, попадающий в диапазон расстояний в столбце D. К примеру, получили мы 10 метров на перегона Самолетная - Взлетная, то РЦ должно быть 503. Получили 52 - соответственно 503а, 111 - 501 и и т.д.
Нет. Не то. На листе "Перегоны" указано расстояние до границы рельсовой цепи от начальной станции перегона. В ходе заполнения формы ALS мы получаем расчетное расстояние местоположения состава, которое хранится в переменной s. Так вот, мы должны подставить соответствующее название рельсовой цепи из таблицы "Перегоны" столбец С, попадающий в диапазон расстояний в столбце D. К примеру, получили мы 10 метров на перегона Самолетная - Взлетная, то РЦ должно быть 503. Получили 52 - соответственно 503а, 111 - 501 и и т.д.Паштет
i = 2 Do While Sheets("Перегоны").Cells(i, 3) <> 0 If Val(Sheets("Перегоны").Cells(i, 4)) < Val(s) And Sheets("Перегоны").Cells(i, 1) = peregon Then rc = Sheets("Перегоны").Cells(i + 1, 3) End If If rc = 0 And Sheets("Перегоны").Cells(i, 1) = peregon Then rc = Sheets("Перегоны").Cells(i, 3) End If i = i + 1 Loop
[/vba]
Обыграл следующем образом: [vba]
Код
i = 2 Do While Sheets("Перегоны").Cells(i, 3) <> 0 If Val(Sheets("Перегоны").Cells(i, 4)) < Val(s) And Sheets("Перегоны").Cells(i, 1) = peregon Then rc = Sheets("Перегоны").Cells(i + 1, 3) End If If rc = 0 And Sheets("Перегоны").Cells(i, 1) = peregon Then rc = Sheets("Перегоны").Cells(i, 3) End If i = i + 1 Loop
Павел, почитайте про оператор With https://u.to/eiDHFA У Вас прямо просится [vba]
Код
With Sheets("Перегоны") Do While .Cells(i, 3) <> 0 If Val(.Cells(i, 4)) < Val(s) And .Cells(i, 1) = peregon Then rc = .Cells(i + 1, 3) End If If rc = 0 And .Cells(i, 1) = peregon Then rc = .Cells(i, 3) End If i = i + 1 Loop End With
[/vba]
* А остальное все равно по-прежнему непонятно. Не знаю, может, это я просто торможу...
Павел, почитайте про оператор With https://u.to/eiDHFA У Вас прямо просится [vba]
Код
With Sheets("Перегоны") Do While .Cells(i, 3) <> 0 If Val(.Cells(i, 4)) < Val(s) And .Cells(i, 1) = peregon Then rc = .Cells(i + 1, 3) End If If rc = 0 And .Cells(i, 1) = peregon Then rc = .Cells(i, 3) End If i = i + 1 Loop End With
[/vba]
* А остальное все равно по-прежнему непонятно. Не знаю, может, это я просто торможу..._Boroda_
Boroda, спасибо, что напомнили про With. Про него знаю и применяю, только здесь проглядел.
Ох... Грубо говоря, путь от станции до станции порезан на участочки - РЦ, которые имеют свое обозначение. В таблице "Перегоны" надо сопоставить название РЦ между расстояниями конца текущей РЦ и предыдущей, в зависимости от место положения состава.
Boroda, спасибо, что напомнили про With. Про него знаю и применяю, только здесь проглядел.
Ох... Грубо говоря, путь от станции до станции порезан на участочки - РЦ, которые имеют свое обозначение. В таблице "Перегоны" надо сопоставить название РЦ между расстояниями конца текущей РЦ и предыдущей, в зависимости от место положения состава.Паштет