Страницы: 1
RSS
Выйти из макроса из пользовательской формы
 
Добрый день, помогите разобраться, пересмотрел много форумов, но не нашел решения, или я не так понял. Я не особо разбираюсь в VBA.

Есть макрос, который выполняет копирование(не весь тест макроса), и вызывает поочередно пользовательские формы "incop" и  "outcop".
Вопрос простой, как мне при нажатие кнопки на форме, выйти из этого макроса.
Пробовал сделать другой макрос и вставить его в кнопку формы, а в макросе сделать переменную, а эту переменную поставить в конец макроса копирование,и прописать условие на выход, но не получилось.
Код
Sub kopirovanie()
name_book_incop.Show
otkyda = name_book_incop.ComboBox1.Value
name_book_outcop.Show
kyda = name_book_outcop.ComboBox1.Value
stocain = InputBox("", "")

If stocain = "" Then Exit Sub

Код
Private Sub commandButton2_Click()
End Sub
 
mikel_dead, может так?
Код
Private Sub commandButton2_Click()
 name_book_incop.hide
End Sub
In GoTo we trust
 
Что подразумеваете под "выйти из макроса"?
 
Цитата
tolstak написал:
mikel_dead , может так?
Нет, это просто скрывает форму, и продолжается макрос дальше.
Цитата
Hugo написал:
Что подразумеваете под "выйти из макроса"?
Есть команда exit sub, которая завершает макрос. Так вот мне нужно знать, что прописать в кнопке формы, чтобы макрос копирование завершился.
 
Инструкция по выходу из процедуры (макроса) может быть прописана только в самой процедуре (макросе).
 
А как обмануть систему?
 
mikel_dead, Вы же не просто так формы вызываете, значит вносятся какие-то данные. Составьте блок условий при которых будет выход из программы. Или, если нужно выйти сразу после возвращения из формы, поставьте эту инструкцию в соотв.месте кода.
Код
UserForm1.Show:Exit Sub

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

Изменено: Anchoret - 01.03.2018 12:06:33
 
Я спрошу вот, есть идея, что при нажатии кнопки формы, у нее есть какое значение(истина,ложь)? Если это так, тогда можно будет обратиться к value кнопки, и все гуд.
Но теперь вопрос, это вообще возможно?
 
Объявите глобальную переменную, например:
Код
Public AA as Boolean
это нужно сделать в одном из модулей.
В обработчики события формы добавляете:
Код
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 
    If CloseMode = vbFormControlMenu Then AA=True 
End Sub
Теперь при нажатии на крестик в переменную AA будет записано True.
 
Спасибо за технологичное решение.
Я сделал не много по деревенски, присвоил значение ячейки по нажатию кнопки, и это значение использую в макросе.

Подскажите еще вопрос про то, как отключить обновление экрана на 2х книгах. Т.к. у меня макрос на копирование из одной книги в другую, я пытаюсь отключить, но у меня не получается. Он все равно обновляет. Что я только не пробовал и пробую каждую активную книгу отключить все равно не выходит.
Код
Workbooks(kyda).Sheets("ðååñòð äèñòð").Activate
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.ShowWindowsInTaskbar = False
Application.Calculation = xlCalculationManual
Application.DisplayAlerts = False

Workbooks(otkyda).Sheets("ðååñòð äèñòð").Activate
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.ShowWindowsInTaskbar = False
Application.Calculation = xlCalculationManual
Application.DisplayAlerts = False
Изменено: mikel_dead - 01.03.2018 14:10:55
 
Чтобы взять какие-либо данные из любой открытой книги не нужно ее активировать. Просто пишите откуда берете и куда вставляете.
 
Нет это я понял, я про то что. хочу отключить переходы с книги на книгу, или это не возможно?
 
Переходы при активации, либо при открытии новой книги. Книга1.Лист.диапазон=Книга2.Лист.диапазон. И никаких переходов.
 
Всем добрый день!
Уважаемые знатоки, помогите пожалуйста, начинающему пользователю!
Есть макрос, проверяющий вносимые данные на условие. При разных условиях используются разные UserForm
В каждой UserForm есть 2 активные кнопки "Да" и "Нет", которым также назначены макросы
У меня вопрос: почему после нажатия на кнопке "нет"  макрос назначенный этой кнопке выполняется, а после выполняется остальная часть основного макроса, хотя по моей идее все должно закончится.
Код
 Sub Macro4 ()
 Dim текст As Variant

MsgBox "Введите дату внесения платежа..."
текст = InputBox("Введите дату внесения платежа в формате ХХ.ХХ.ХХХХ", "Дата внесения платежа", " ")
MsgBox текст
    If текст = " " Then ActiveCell.EntireRow.Delete
    If текст = " " Then Exit Sub
    If текст <> "" Then
ActiveCell.Offset(-1, 7) = текст
End If
MsgBox "Введите сумму внесенного платежа..."
текст = InputBox("Введите сумму вносимого платежа", "Сумма платежа", " ")
MsgBox текст
If текст = " " Then ActiveCell.EntireRow.Delete
If текст = " " Then ActiveCell.Offset(-2, 7).Select
Selection.Copy
If текст = " " Then ActiveCell.Offset(1, 0).PasteSpecial (xlPasteFormulas)
If текст = " " Then Exit Sub
If текст <> "" Then
ActiveCell.Offset(-1, 6) = текст
If ActiveCell.Offset(-1, 6).Value < ActiveCell.Offset(-1, 15).Value Then UserForm1.Show
If ActiveCell.Offset(-1, 6).Value = ActiveCell.Offset(-1, 15).Value Then UserForm3.Show
If ActiveCell.Offset(-1, 6).Value > ActiveCell.Offset(-1, 15).Value Then UserForm2.Show
End If
MsgBox "Проверьте правильность внесенных данных... Спасибо!"

А это макрос активных кнопок UserForm1
Код
Private Sub Да_Click()
UserForm1.Hide
ActiveCell.Offset(0, -6).Activate

End Sub

Private Sub Нет_Click()
UserForm1.Hide
ActiveCell.Offset(0, 7).Select
Selection.Copy
ActiveCell.Offset(-1, 0).PasteSpecial (xlPasteFormulas)
ActiveCell.Offset(0, -1).Value = 0
ActiveCell.Offset(1, 0).Activate
ActiveCell.EntireRow.Delete
ActiveCell.Offset(-1, -7).Activate

End Sub
Подскажите, что нужно прописать, чтобы, после выполнения процедуры Нет, не выполнялась дальнейшие проверки условий Macro4?  
Изменено: Mikeger - 12.03.2019 15:02:56 (ошибка вопроса)
 
макрос работает не так как ему вздумается, а так как его написал программист

для тото что кто-то мог поравить текст Ваших макросов, Вы должны этому "кто-то" точно рассказать, что должно происходить после тех или иных действий пользователя.
и еще одно условие: этому "кто-то" должно быть совсем нечего делать или вдруг Ваша задача покажется интересной на столько, что он ее решит
но первое условие намного важнее чтобы решать задачу - нужно точно понимать что требуется в условиях задачи
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
макрос работает не так как ему вздумается, а так как его написал программист
Я и не спорю, Игорь... Я же и говорю, что я что-то неправильно написал или недописал какую-то команду, потому что ее не знаю.
У меня поле последней строки процедуры Да_Click() происходит выполнение строк 23-26 из Макрос 4, чего происходить не должно, поскольку введенному значению может соответствовать только одно условие из 3-х (<; >; =) и по моему замыслу, после нахождения нужного условия, должны выполняться процедуры заданные в UserForm (1, 2 или 3 в зависимости от значения) этого условия и здесь выполнение всех процедур должно прекращаться.
 
Предположу, что нажатие кнопок у вас вызывается командой Call. И соответственно если после этой команды идет еще код, то выполнив "вызванный" макрос, продолжается выполнение дальнейшего кода. Вам нужно эти события включить в тело самого кода и записать где нужно exit sub.

p.s. это всего лишь мои предположения и я не очень хорошо знаю vba.
 
Как просите, так и работает.
Код
If ActiveCell.Offset(-1, 6).Value < ActiveCell.Offset(-1, 15).Value Then 
UserForm1.Show
ElseIf ActiveCell.Offset(-1, 6).Value = ActiveCell.Offset(-1, 15).Value Then
 UserForm3.Show
Else
UserForm2.Show
End If
Изменено: RAN - 12.03.2019 17:49:06
 
End. Просто End.
 
Казанский, нет слов)
Страницы: 1
Наверх