Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/34: Рейтинг темы: голосов - 34, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 09.09.2015
Сообщений: 6

Как завершить программу (используя функцию end) с ненулевым кодом завершения?

09.09.2015, 14:28. Показов 7025. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос наверное глупый, но я не специалист по vba
Скажите как завершить программу (использую функцию end) с ненулевым кодом завершения
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.09.2015, 14:28
Ответы с готовыми решениями:

Программа завершила работу с ненулевым кодом возврата. C++
Добрый вечер.При отправке в проверочный сайт ошибка runtime-error. В значении ошибок, Run-time error значится как - Программа завершила...

Как можно запустить прогу, не используя функцию Shell, а используя API функцию?
Привет Всем! Подскажите, как можно запустить прогу, не используя функцию Shell, а используя API функцию. Наверное PostMessage или...

Завершить через 45 секунд работу компьютера (с обратным отсчетом времени до завершения)
Составить консольною программу ,завершающую через 45 секунд работу компьютера и выводящую в консоль время оставшееся до завершения. Кто...

13
2061 / 490 / 134
Регистрация: 13.11.2008
Сообщений: 934
09.09.2015, 14:32
А как Вы код завершения получаете? Что под этим подразумевается?
0
0 / 0 / 0
Регистрация: 09.09.2015
Сообщений: 6
09.09.2015, 14:39  [ТС]
в смысле если на с++
int main(....)
{
return 1;
}
Т.е. код который возвращается в командную строку как результат выполнения программы

Добавлено через 1 минуту
т.е. предполагается что эта программа (которая должна возвращать код) будет вызываться из основной программы, которой нужно отловить результат работы вызванной программы
0
2061 / 490 / 134
Регистрация: 13.11.2008
Сообщений: 934
09.09.2015, 14:54
Так называйте не Sub, а Function:
Visual Basic
1
2
3
Function Test()
    Test = 1 ' возвращаем значение
End Function
и вызов такой функции:
msgbox Test
Visual Basic
1
2
3
dim s
s = Test
msgbox s
0
0 / 0 / 0
Регистрация: 09.09.2015
Сообщений: 6
09.09.2015, 14:57  [ТС]
речь не о функции или процедуре, а о коде завершения процесса
функция End
или такого в vb не возможно?

Добавлено через 1 минуту
т.е. просто end не end sub
0
2061 / 490 / 134
Регистрация: 13.11.2008
Сообщений: 934
09.09.2015, 15:02
А как Вы собрались вызвать код в VBA из другой программы/файла?
0
0 / 0 / 0
Регистрация: 09.09.2015
Сообщений: 6
09.09.2015, 15:12  [ТС]
точно, я перепутал тему, не vba конечно, а visual basic
0
0 / 0 / 0
Регистрация: 09.09.2015
Сообщений: 6
09.09.2015, 15:13  [ТС]
Вопрос наверное глупый, но я не специалист по vb
Скажите как завершить программу (использую функцию end) с ненулевым кодом завершения
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38200 / 21132 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
09.09.2015, 16:11
Нужно использовать API-функцию:

Visual Basic
1
Public Declare Sub ExitProcess Lib "kernel32" Alias "ExitProcess" (ByVal uExitCode As Long)
0
2061 / 490 / 134
Регистрация: 13.11.2008
Сообщений: 934
09.09.2015, 16:48
В общем случае return в С это тоже самое, что принудительное присвоение возвращаемого значения. И это не тоже самое, что End. End завершает все процедуры и(вроде бы) закрывает поток. Поэтому после End нельзя уже ничего получить от процедуры.
Вывод: строить логику процедур таким образом, чтобы процедура всегда завершалась корректно и передавала все необходимые значения пока она работает. Насколько знаю в VB нельзя после End ничего получить, если только данные не были записаны в некий внешний источник(текстовый файл, например).
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38200 / 21132 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
09.09.2015, 18:17
В VBA устанавливать код завершения... А зачем? Другое дело VB. Создаем проект, удаляем форму, добавляем модуль и него вставляем этот код:

Visual Basic
1
2
3
4
5
Public Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)
Sub Main()
    R& = Val(InputBox("Задайте код завершения"))
    ExitProcess R&
End Sub
Транслируем. Получается exe-файл. Теперь пишем вот такой батник:

Code
1
2
3
@echo off
testexit.exe
echo RC=%errorlevel%
(testexit.exe - имя нашего exe). Стартуем cmd.exe в текущей директории и в окне cmd запускаем наш батник. Он спросит код завершения. Введем число и увидим, что errorlevel установится верно.
Вложения
Тип файла: zip Exit00.zip (3.3 Кб, 6 просмотров)
2
0 / 0 / 0
Регистрация: 22.12.2011
Сообщений: 224
06.09.2016, 13:46
у меня такой же вопрос, вот так сложилось (vba ms acceess 2007) что есть несколько функций или процедур, которые вложены друг в друга, надо из самой глубоко заложенной функции или процедуры, произвести завершение, основного запускаемого макроса. как это можно сделать? exit sub или exit function не подойдут, потому что завершают свою процедуру или функцию и передают управление дальше. Да, основной макрос написан на отдельном модуле, а функции и процедуры на другом модуле
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
10.09.2016, 09:10
Цитата Сообщение от ramzes2012 Посмотреть сообщение
надо из самой глубоко заложенной функции или процедуры, произвести завершение
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Function RecMacro&(Optional ByVal r&)
    If r < 5 Then
        RecMacro& = RecMacro&(r + 1)
    Else
        RecMacro& = r: Exit Function
    End If
End Function
 
Sub Form_Load()
    MsgBox "программа выполнилась " & RecMacro & " раз"
End Sub
Миниатюры
Как завершить программу (используя функцию end) с ненулевым кодом завершения?  
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
10.09.2016, 14:09
Цитата Сообщение от ramzes2012 Посмотреть сообщение
есть несколько функций или процедур, которые вложены друг в друга
Я понимаю, если циклы вложены друг в друга. А вложенные функции - это как?

Просто добавляете оператор if до конца блока.
Если процедура получилась действительно очень длинная, самое время провести рефакторинг - разбиваете одну большую процедуру на несколько маленьких (да, возможно где-то придётся дублировать состояние переменных, но чаще всегда, это вполне легко сделать).
Если этого в данный момент не позволяют сделать временные затраты, то можете как временное решение воспользоваться оператором goto (так сказать, плохой code-style). Подчеркну - как временное, т.к. можно получить неявные ошибки, которые могут проявится нескоро и будут трудно-уловимыми.

Добавлено через 2 минуты
P.S. А вообще смахивает, что у Вас неверное понимание основных методов построения структуры кода (мне кажется, всё что Вам нужно, показано в посте № 4).
Покажите любой Ваш пример.

Добавлено через 12 минут
PS.2. Не обратил внимания, что в теме несколько спрашивающих. Мой ответ относился к t_tima.

Цитата Сообщение от ramzes2012 Посмотреть сообщение
надо из самой глубоко заложенной функции или процедуры, произвести завершение, основного запускаемого макроса. как это можно сделать?
Лучше всего конечно же перестроить логику макроса таким образом, чтобы подпрограмма, которая первой получает управление, проверяла код возврата вызываемой функции. Если там, например, 0, то завершать работу стандартно по Exit Sub/Function. В функции соответственно, если нужен выход, присваивать значение 0 и досрочно выходить из неё.
Если логика программы не позволяет манипулировать этим значением, самое время, перестроить прототип функции, например, вместо:

Visual Basic
1
2
3
4
5
6
7
8
Sub Точка_входа()
    День = Получить_День()
    msgbox День
End Sub
 
Function Получить_День() as long
    Получить_День = Day(Now())
End Function
Писать:

Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub Точка_входа()
    if 0 = Получить_День(День) then exit sub
    msgbox День
End Sub
 
Function Получить_День(День as long) as boolean
    if Нужно_выйти_раньше then Получить_День = false
    День = Day(Now())
    Получить_День = true
End Function
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.09.2016, 14:09
Помогаю со студенческими работами здесь

Как досрочно завершить функцию?
Как досрочно завершить функцию?? я знаю о break и continue но они для циклов... в Delphi(и в паскале) есть функция exit но тут я такой...

Как принудительно завершить функцию recvfrom
Добрый день. Подскажите как завершить ф-н recvfrom? Приложение ждет данных из сети , но если нужно выйти из программы то как...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru