Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Форма для выполнения кода / 25 сообщений из 31, страница 1 из 2
16.03.2010, 07:00
    #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
16.03.2010, 09:46
    #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
16.03.2010, 10:13
    #36522456
segail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма для выполнения кода
Shocker.Pro,
Я так понял в кнопке CommandButton1 код b=1
Конструкцию которую прописал я невозможна?
...
Рейтинг: 0 / 0
16.03.2010, 10:23
    #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
16.03.2010, 10:35
    #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
16.03.2010, 10:37
    #36522521
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма для выполнения кода
Уточните, случайно не требуется закрывать форму UserForm1 при нажатии кнопок Command1 и Command2?
...
Рейтинг: 0 / 0
16.03.2010, 10:39
    #36522528
segail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма для выполнения кода
Shocker.Pro,
Да в любом случае она закрывается.
...
Рейтинг: 0 / 0
16.03.2010, 10:42
    #36522545
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма для выполнения кода
segailShocker.Pro,
Да в любом случае она закрывается.

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

Код: plaintext
UserForm1.Show  1 

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

Я не рассчитывал через Public поэтому и не писал, потому что на прямую закрыть я сам знаю..
...
Рейтинг: 0 / 0
16.03.2010, 10:52
    #36522574
segail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма для выполнения кода
segail,
Мне кажется, при закрытии CommandButton2 можно оставить Unload Me
...
Рейтинг: 0 / 0
16.03.2010, 11:02
    #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
16.03.2010, 11:07
    #36522635
segail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма для выполнения кода
AlexFr,

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

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

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

Я тебе просто картинку нарисовал для наглядности.
1. Нарисуй такую форму сам
2. Вставь в макросов код Sub ForUF2_Proc1()
3. Вставь в тело формы второй код
и можешь проверять работу и менять все по своему
...
Рейтинг: 0 / 0
16.03.2010, 11:28
    #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
16.03.2010, 11:30
    #36522732
AlexFr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма для выполнения кода
segail,

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

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

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

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

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

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

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


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