Модуль класса и форма (продолжение)

Программирование на Visual Basic for Applications
Steiner
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 26.10.2004 (Вт) 10:54

Модуль класса и форма (продолжение)

Сообщение Steiner » 18.07.2006 (Вт) 9:13

Имеется процедура, в стандартном модуле (Excel), из неё загружается форма. На форме две кнопки. Вопрос:
Можно ли сделать так, чтобы при нажатии одной из кнопок, продолжалось выполнение запускающей форму процедуры.
Короче, чтобы при нажатии нужной кнопки, управление передавалось запускающей процедуре и продолжалось дальнейшее выполнение програмного кода процедуры (которая рассположена не в модуле формы).
Вышлите пожалуйста пример кода, если возможно решение данной проблемы.
Последний раз редактировалось Steiner 20.07.2006 (Чт) 8:42, всего редактировалось 2 раз(а).
Если человек до двадцати лет не поумнел, значит он увы уже никогда НЕ ПОУМНЕТ!

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 18.07.2006 (Вт) 9:26

Не совсем тебя понял, но тебе должно помочь ИМХО следующее:
Объяви процедуру, как Public (а не Private) и вызывай: ИмяФормы.ИмяПроцедуры()
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 18.07.2006 (Вт) 10:58

Прорыв телепатических способностей подсказывает мне, что автор хочет чтоб запускающая процедура запустилась еще раз, но видимо с другой точки входа? Ежели так, то может помочь только одно - разбиение ее на две части, ибо точка входа в процедуру всегда одна.

Ежели же автор имеет ввиду что-то другое, то срочно рекомендуется сформулировать что же он все-таки хочет, ибо непонятно.
Весь мир матрица, а мы в нем потоки байтов!

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 18.07.2006 (Вт) 12:02

Form1
Код: Выделить всё
Option Explicit

Private Sub Command1_Click()
  Hide
  Show
End Sub

Module1
Код: Выделить всё
Option Explicit

Sub Main()
  Form1.Show 1
  MsgBox "Лалала"
End Sub

[EDIT]: Ах да! Startup Object: Sub Main

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 18.07.2006 (Вт) 12:06

И что это людям дает?
Весь мир матрица, а мы в нем потоки байтов!

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Re: Стандартны модуль и форма

Сообщение Nicky » 18.07.2006 (Вт) 12:13

Steiner писал(а):Короче, чтобы при нажатии нужной кнопки, управление передавалось запускающей процедуре и продолжалось дальнейшее выполнение програмного кода процедуры (которая рассположена не в модуле формы)

Один-в-один

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 18.07.2006 (Вт) 12:17

Nicky писал(а):
Код: Выделить всё
Form1.Show 1

Помоему тоже, автор хочет
Form1.Show 0
Form1.Show 1

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 18.07.2006 (Вт) 20:30

Когда я читаю такие темы, я всегда умиляюсь.
Тому, сколько упорно люди используют конструкции а-ля ".Show 1".
Что означает эта конструкция, блин? Я не могу понять. Во всяком случае, на это уходит время.
Вообще-то, есть .Show vbModal или .Show vbModeless. Но который год повторяется одно и тоже. Show 1, Show 0.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 19.07.2006 (Ср) 6:49

2GSerg:
MSDN писал(а):style Optional. Integer that determines if the form is modal or modeless. If style is 0, the form is modeless; if style is 1, the form is modal.

Steiner
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 26.10.2004 (Вт) 10:54

Сообщение Steiner » 20.07.2006 (Чт) 8:41

Спасибо за советы, но уважаемые всё не то и дело не в отображении формы модальном или не модальном режиме. Постараюсь изложить проблемму попонятнее.
Дело в том что есть программа по складу, написанная мною недавно. Спустя некоторое время я понял, что msgbox сильно портит интерфейс программы и занялся изготовлением собственных msgbox-ов. Так вот в моей программе есть класс "Товар" со своими свойствами и методами. И вот, при запуске одного из методов, это собственно процедура в модуле класса, который называется "Delete"
(удалить товар из базы данных) начинается выполнение програмного кода, и наступает момент когда от пользователя требуется подтверждение типа "Вы действительно хотите удалить такой-то товар?". Тогда из данной процедуры
вызывается форма, естественно методом Show, форма это мой собственный msgbox, на ней две кнопки "Оk" и "Close". Так вот, как сделать так, чтобы при нажатии кнопки "Ок", продолжилось выполнение вызывающей процедуры с того места програмного кода, которое находиться ниже вызова формы ( как при вызове обычного msgbox и принажатии Ok происходит дальнейшее выполнение кода).
Ведь процедура вызывающая форму не дошла но "End Sub", вот по этому я и решил обратиться к вам по данному вопросу, можно ли так сделать или нет. А вы либо дайте совет либо опровергните моё предположение.
Если человек до двадцати лет не поумнел, значит он увы уже никогда НЕ ПОУМНЕТ!

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 20.07.2006 (Чт) 8:57

Module1
Код: Выделить всё
Option Explicit

Sub main()
  Select Case Form1.ShowMe
    Case -1: MsgBox "Просто закрыли"
    Case 0: MsgBox "Нажали Close"
    Case 1: MsgBox "Нажали OK"
  End Select
End Sub

Form1
Код: Выделить всё
Option Explicit

Dim lRet As Long

Function ShowMe(Optional sErr As String) As Long
  On Error GoTo er
 
  lRet = -1
  Show vbModal 'привет GSerg'у :)
  ShowMe = lRet
  GoTo ok
 
er:
  sErr = Err.Description
ok:
  Unload Me
End Function

Private Sub cbClose_Click()
  lRet = 0
  Hide
End Sub

Private Sub cbOk_Click()
  lRet = 1
  Hide
End Sub


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 5

    TopList