powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Форма для выполнения кода
25 сообщений из 31, страница 1 из 2
Форма для выполнения кода
    #36522248
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
У меня вопрос, сам не знаю, возможно такое.
Например, есть некая универсальная форма UserForm1 с двумя кнопками CommandButton1 и CommandButton2.
Данную форму можно вставлять в начале любого кода, в виде кода открытия UserForm1.Show, дальнейший смысл в том, что коды кнопок дают, выполнить последующий код, перед которым вставлен код формы UserForm1.Show, или нет. Но изначально, наверно после UserForm1.Show должна, быть какая та функция блокировки кода.
Примерно будет выглядеть так:
Код: plaintext
1.
2.
3.
4.
Private Sub CommandButton_Click()  
	UserForm1.Show 'коды кнопок: CommandButton1 снять блокировку выполнить код , CommandButton2 закрыть форму без выполнения кода.
	a= 1  'Функция блокировки кода
	b= 1  'Код который необходимо выполнить
End Sub
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36522397
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub CommandButton_Click()  
	UserForm1.Show 
End Sub

'На форме UserForm1:

Private Sub CommandButton1_Click()  
	b= 1 
End Sub
Private Sub CommandButton2_Click()  
	Unload Me
End Sub
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36522456
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Я так понял в кнопке CommandButton1 код b=1
Конструкцию которую прописал я невозможна?
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36522480
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segailКонструкцию которую прописал я невозможна?

Возможна, если хотите принципиально сделать через одно место:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Public ToDo As Integer

Private Sub CommandButton_Click()  

ToDo =  0 
UserForm1.Show
Do While ToDo= 0 
  DoEvents
Loop

If ToDo= 1  Then
  b= 1  'Код который необходимо выполнить
End If

End Sub

'На форме UserForm1:

Private Sub CommandButton1_Click()  
  ToDo= 1 
End Sub
Private Sub CommandButton2_Click()  
  ToDo= 2 
End Sub
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36522516
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Предполагается что форма универсальная, и будет выставлена в различных кодах.
Конечно, если выполнить всего один код, то нужна простая конструкция, которую предложили Вы.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub CommandButton_Click()  
	UserForm1.Show 
End Sub

'На форме UserForm1:

Private Sub CommandButton1_Click()  
	b= 1 
End Sub
Private Sub CommandButton2_Click()  
	Unload Me
End Sub
А если несколько кодов которые прописаны в разных формах?
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36522521
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уточните, случайно не требуется закрывать форму UserForm1 при нажатии кнопок Command1 и Command2?
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36522528
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Да в любом случае она закрывается.
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36522545
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segailShocker.Pro,
Да в любом случае она закрывается.

Ну так надо ж это сразу писать, блин!

Код: plaintext
UserForm1.Show  1 

Вызывает форму и вызвавший код приостанавливается до ее закрытия.
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36522559
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Я не рассчитывал через Public поэтому и не писал, потому что на прямую закрыть я сам знаю..
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36522574
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segail,
Мне кажется, при закрытии CommandButton2 можно оставить Unload Me
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36522610
AlexFr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
segail,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
 
Sub ForUF2_Proc1()
 'Офрмление стандартной UserForm2
 UserForm2.Caption = "Создание листа данных"
 UserForm2.Label1 = "Для данных " & "каких-нибудь твоих" & Chr( 10 ) & " не существует листа." & Chr( 10 ) & " Создать лист?"
 UserForm2.CommandButton1.Caption = "Создать - Enter"
 UserForm2.CommandButton2.Caption = "Пропуск - BackSp"
 UserForm2.CommandButton3.Caption = "Отмена - Esc"
 UserForm2.TextBox1 = ""
 UserForm2.Show
 'что она будет делать в зависимости от значения TextBox1
 If UserForm2.TextBox1 = "OK" Then
  Sheets.Add
  ActiveSheet.Name = "Proc1"
  UserForm2.TextBox1 = ""
 End If
 If UserForm2.TextBox1 = "Skip" Then
  UserForm2.TextBox1 = ""
 End If
 If UserForm2.TextBox1 = "Cancel" Then
  Unload UserForm2
 End If
 End Sub
 
Делай набор процедур какой хочешь...
Код: plaintext
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.
Private Sub CommandButton1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
KeyCodeProc (KeyCode)
End Sub
Private Sub CommandButton2_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
KeyCodeProc (KeyCode)
End Sub
Private Sub CommandButton3_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
KeyCodeProc (KeyCode)
End Sub
Private Sub CommandButton1_Click()
Me.TextBox1 = "OK"
End Sub
Private Sub CommandButton2_Click()
Me.TextBox1 = "Skip"
End Sub
Private Sub CommandButton3_Click()
Me.TextBox1 = "Cancel"
End Sub
Sub KeyCodeProc(KeyCodeP)
If KeyCodeP =  13  Then Me.TextBox1 = "OK"
If KeyCodeP =  32  Then Me.TextBox1 = "Skip"
If KeyCodeP =  27  Then Me.TextBox1 = "Cancel"
End Sub
Private Sub TextBox1_Change()
Me.Hide
End Sub
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36522635
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexFr,

Нормальный ребус...
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36522641
AlexFr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
segail,

1. Макрос ради универсальности использования UserForm
2. Чисто ради примера (ничего личного :) )
3. Сама Me
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36522658
AlexFr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
segail,

TextBox1 в данном случ как индикатор и переменная текущего состояния процесса...
Для наглядности...
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36522691
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexFr,
Файл не скачивается
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36522705
AlexFr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
segail,

Я тебе просто картинку нарисовал для наглядности.
1. Нарисуй такую форму сам
2. Вставь в макросов код Sub ForUF2_Proc1()
3. Вставь в тело формы второй код
и можешь проверять работу и менять все по своему
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36522727
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexFr,

Зачем ему такие навороты? Он просто делает свой MsgBox.
В его первоначальный код всего лишь надо добавить единичку

Код: plaintext
1.
2.
3.
4.
Private Sub CommandButton_Click()  
	UserForm1.Show  1  'коды кнопок: CommandButton1 снять блокировку выполнить код , CommandButton2 закрыть форму без выполнения кода.
	'a=1 'Функция блокировки кода - не нужна, код не выполняется, пока форма не закроется
	b= 1  'Код который необходимо выполнить
End Sub
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36522732
AlexFr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
segail,

после UserForm2.Show вид такой
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36522738
AlexFr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Мне показалось, что представление и задача расходятся...
Пусть посмотрит ничего страшного. Все максимально просто вроде и очень учебно :)
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36522758
AlexFr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
segail,

Что тебе не понятно?
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36523019
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О!

Я тут попробовал (в экселе) и выяснил, что даже без модальности, т.е. при вызове
UserForm1.Show
вызвавший код останавливается до закрытия формы (в отличие от VB).
По крайней мере для настроек формы по умолчанию.

Тогда я немножко вообще в ступоре, откуда у автора возник вопрос:
Но изначально, наверно после UserForm1.Show должна, быть какая та функция блокировки кода.
если код и так блокируется.
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36523084
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Высылаю пример.
Необходимо окрасит 4 текста через форму4
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36523115
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята я про блокировку говорил в переносном смысле, я предложил примерную конструкцию…
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36523170
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так пойдет?
...
Рейтинг: 0 / 0
Форма для выполнения кода
    #36523200
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще, вопрос к знатокам VBA (коим я, кстати, не являюсь)

Я поначалу пытался решить эту тему иначе.
- в вызывающей форме определить публичный метод MyMethod
- отдать вызываемой форме ссылку на вызывающую (в виде публичного свойства типа UserForm или Object) ParentForm
- из вызываемой формы вызвать метод вызывающей через ParentForm.MyMethod

Нифига не получилось. Хотя в VB это запросто прокатывает. Это в принципе невозможно или надо чего-то поднастроить?
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Форма для выполнения кода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]