Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
13 / 13 / 0
Регистрация: 24.10.2015
Сообщений: 232
1

Обход ошибки при срабатывании кода

10.02.2016, 21:33. Просмотров 540. Ответов 10
Метки нет (Все метки)

Доброго всем дня. Подскажите, люди добрые. Запускаю код, выскакивает ошибка, ошибка понятная и предсказуемая (согласен звучит глупо), но скажите, есть способ ее игнорирования, чтобы код не спотыкался об нее, а продолжал работать дальше.
Кстати файлик реальный, по нему работаем (вот добавил кнопки закрытия заказа и проверки и столкнулся с проблемой, раньше не сильно напрягало, просто End жали, да и делу край...) на мой взгляд довольно полезный (может коды не совсем элегантные..., но только учусь, правда, не все рук моих творение). Производственники, можете взять на вооружение.
0
Вложения
Тип файла: rar Планирование.rar (1.17 Мб, 9 просмотров)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.02.2016, 21:33
Ответы с готовыми решениями:

с2079 и с2228 ошибки при компиляции ниже участок кода, с которым праблема и скрины ошибки
// ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ bool game = true; // КЛАССЫ class Me; class mob { public: void...

Вылет при срабатывании деструктора
Собственно говоря вот: class MatrixGraph { int **arcs; int n; public: ...

Сброс МК при срабатывании реле.
Делал я одно устройство с несколькими релюшками. Так вот при срабатывании реле всегда неизбежно...

Ошибки при конвертировании кода
Привет, уважаемые коллеги!! Написал программу на C++ , она работает, вот её код: class Complex{ ...

10
13 / 13 / 0
Регистрация: 24.10.2015
Сообщений: 232
10.02.2016, 21:54  [ТС] 2
Кстати, если кто предложит по кодам более лаконичные решения, буду только рад и признателен
0
3183 / 938 / 216
Регистрация: 29.05.2010
Сообщений: 2,046
10.02.2016, 21:56 3
Используй конструкцию перед ожидаемой ошибкой:
Visual Basic
1
2
3
4
5
6
On error resume next
If err then
'ваш код обработки
err.clear
endif
On error goto 0
0
6668 / 2669 / 497
Регистрация: 19.10.2012
Сообщений: 8,082
10.02.2016, 21:59 4
Проверяйте значение на число (isnumeric()), ну и не выбегайте за пределы массивов.
0
13 / 13 / 0
Регистрация: 24.10.2015
Сообщений: 232
10.02.2016, 22:55  [ТС] 5
Цитата Сообщение от toiai Посмотреть сообщение
Используй конструкцию перед ожидаемой ошибкой:
Visual BasicВыделить код

On error resume next
If err then
'ваш код обработки
err.clear
endif
On error goto 0
Проблему решило, но почему-то перестали вычитаться закрытые трудоемкости на втором листе. Так и должно быть?

Добавлено через 2 минуты
А еще, может кто глянет че-то не нравится как работает код "Проверка". Идея была в том, чтобы если перед закрытой операцией оказывается незакрытая, код ее бы закрывал.
0
Модератор
Эксперт MS Access
9850 / 3890 / 626
Регистрация: 07.08.2010
Сообщений: 11,000
Записей в блоге: 2
11.02.2016, 08:35 6
Исправила объявление ЗАКАЗ и вставила проверку на число
пометила места изменений пятью апострофами
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Sub Ocherednost()
    Const FirstRow& = 3
    Const FirstTrudOper& = 13
    Const NZakCol& = 1
    Const NIzdCol& = 2
    Const RoditelCol& = 3
    Const OchCol& = 4
    Dim h&, i&, j&, k&, N&, LastRow&, LastCol&
    Dim Zakaz As String        '''''
    Dim SborkaNIz%, SborkaRow&, TRow&
    Dim MaxTrud!, MaxTrudSborka!, Trud!, Usl As Boolean, OcheredOld%
    LastRow = Cells(Rows.Count, NZakCol).End(xlUp).Row
    LastCol = Cells(FirstRow - 1, Columns.Count).End(xlToLeft).Column
    Range(Cells(FirstRow, OchCol), Cells(LastRow, OchCol)).ClearContents
    A = Range(Cells(1, 1), Cells(LastRow, LastCol)).Value
    ReDim TrudSbor(LastRow), TrudDet(LastRow), Sbornaya(LastRow)
    For i = FirstRow To LastRow
        For j = FirstTrudOper To LastCol Step 3
        Debug.Print A(i, j)
        If IsNumeric(A(i, j)) Then           ''''''
            TrudDet(i) = TrudDet(i) + A(i, j)
        End If                               '''''''
        Next j
    Next i
    For ZStartRow = FirstRow To LastRow
    Debug.Print A(ZStartRow, NZakCol) & "===='''''"
        Zakaz = A(ZStartRow, NZakCol)
1
13 / 13 / 0
Регистрация: 24.10.2015
Сообщений: 232
11.02.2016, 17:58  [ТС] 7
Цитата Сообщение от shanemac51 Посмотреть сообщение
Исправила объявление ЗАКАЗ и вставила проверку на число
пометила места изменений пятью апострофами
Спасибо, а как на счет "Private Sub Proverka()", что-то никак не могу ничего вразумительного родить. Сам сделал так, чтобы предыдущая операция закрывалась (если она не закрыта), а так чтобы все предыдущие незакрытые закрылись никак не соображу. И еще, если возьметесь за проблему, после закрытия всех предыдущих операций нужно еще раз закрыть последнюю, т.к. если этого не сделать, то в столбце 10 будет искаженная информация.

Добавлено через 1 минуту
Цитата Сообщение от teplovdl Посмотреть сообщение
нужно еще раз закрыть последнюю,
последнюю имеется последнюю выполненную, а не самую последнюю в ряду.
0
13 / 13 / 0
Регистрация: 24.10.2015
Сообщений: 232
14.02.2016, 19:32  [ТС] 8
Уважаемый toiai, все-таки можно сделать так, чтобы код игнорировал только один шаг цикла, а дальше код чтобы работал как и раньше, как если бы вылезла ошибка, пользователь нажал end в окне сообщения об ошибке и запустил код заново. Честно скажу, что ту часть кода, в которой выпадает ошибка писал не сам, а толку до конца разобраться пока не хватает. Но скажу точно, что при вставке оператора для обхода ошибки некая часть кода перестала отрабатывать, что мягко говоря не желательно.
0
13 / 13 / 0
Регистрация: 24.10.2015
Сообщений: 232
15.02.2016, 21:27  [ТС] 9
Ребята, ну подскажите с обработчиком ошибок. С такой необходимостью столкнулся впервые (правда и опыта прямо скажем не много), но все-таки можно настроить его так, чтобы в цикле пропускались только шаги, содержащие ошибки, а остальные отрабатывали. Честно, думал, что логика именно такая, но как ставлю обработчик, цикл вообще перестаёт срабатывать. Я уж в инете вычитал, что можно Resume без Next употреблять, чтобы он с этой же строки начинал, но видимо такие же умники типа меня писали, вообщем ошибку выдаёт... Подскажите..., серьезно замучал вопрос, не в обиду будет студентам сказано, но это реальная задача для производства, а не вопрос из разряда "помогите двоишнику"
0
Модератор
Эксперт MS Access
9850 / 3890 / 626
Регистрация: 07.08.2010
Сообщений: 11,000
Записей в блоге: 2
15.02.2016, 21:47 10
Visual Basic
1
2
3
4
Debug.Print A(i, j)
        If IsNumeric(A(i, j)) Then           ''''''
            TrudDet(i) = TrudDet(i) + A(i, j)
        End If
єтот кусок я преобразовала, чтобы он не давал ощибки
с остальными надо также разбираться --почему ошибка

слепое on error resume next --при ошибке перейти на следующую строку --задачи не решит
1
13 / 13 / 0
Регистрация: 24.10.2015
Сообщений: 232
15.02.2016, 22:30  [ТС] 11
Ошибку то понятно почему выдаёт: или трудоемкость на первом листе равна " " или на втором листе не встретилось название операции из первого листа. Можно конечно перебороть проблему путём проставления липовой трудоемкости в операциях, которые не учитываются при определении трудоемкости заказа ( например, транспортная или контрольная), но это постоянный геморрой плюс надо сделать так, чтобы эта липовая трудоемкость реально не учитывалась на
втором листе, например перед столбцов " заг" добавить столбцов восемь, куда бы скидывалась трудоемкость подобных операций и эти столбцы не учитывать при расчете суммы, а чтобы они не мешались попросту скрыть их.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.02.2016, 22:30

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Ошибки при компиляции кода
У меня дано задание "Записать программу, которая на ввод знака препинания выдает на экран дисплея...

Ошибки при компиляции кода
Всем привет, суть проблемы следующая решил написать программу для одной задачи, пока написал цикл...

Ошибка сегментации при срабатывании деструктора
Всем привет. Помогите, пожалуйста, разобраться с деструкторами. Суть проблемы заключается вот в...

Загрузка приложения при срабатывании будильника
Здравствуйте. в приложении включается будильник и при его срабатывании выполняется метод из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.