powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA: сложная функция
10 сообщений из 10, страница 1 из 1
VBA: сложная функция
    #37108107
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VBA

Может ли функция перед тем как возвращать значение вызвать процедуру, но при этом продолжать свою работу, а вот процедура при этом должна подождать полного завершения работы функции и только после этого начать свою работу?

Объясню на примере:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
' Где-то (неважно где) в программе вызываем функцию
НекаяПеременная = МояФункция()

' Тело функции
Function МояФункция() AS Boolean
    НекаяПроцедура
    ' Вот здесь каким-то макаром нужно продолжить работу функции
    МояФункция = True
End Function

Sub НекаяПроцедура()
    ' Вот здесь каким-то макаром должны проверить завершила ли свою работу МояФункция
    If ... Then
    ' Если не завершила, то подождать завершения.
    ' Если завершила, то только после этого начать работу процедуры.
End Sub
...
Рейтинг: 0 / 0
VBA: сложная функция
    #37108120
Фотография Green2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это многопоточность.
Если ваши функции будут в отдельном потоке то всё получится.
Задача вообще какая стоит, ради чего это надо?
...
Рейтинг: 0 / 0
VBA: сложная функция
    #37108135
.Михаил.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studieren, как вариант (если это VBA):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Public flag As Boolean 

Sub test_1()
    Dim i As Long
    flag = False
    MsgBox "test_1"
    Application.OnTime  1 , "test_2"
    For i =  1  To  100000000 
    Next
    flag = True: Exit Sub
End Sub

Sub test_2()
    Do While Not flag
        DoEvents
    Loop
    MsgBox "test_2"
End Sub
...
Рейтинг: 0 / 0
VBA: сложная функция
    #37108145
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Green2Это многопоточность.
Если ваши функции будут в отдельном потоке то всё получится.
Задача вообще какая стоит, ради чего это надо?

Для решения одной частной задачки в MS Access мне требуется подобная функция.
А как реализовать в VBA многопоточность? DoEvents?


.Михаил., Ваш вариант мне чуть-чуть не подходит, ибо в MS Access нет возможности на "Application.OnTime". Там нет такого метода. А ради него не хочется подключаться к Excel.
...
Рейтинг: 0 / 0
VBA: сложная функция
    #37108158
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может быть есть какая-та Win API функция, работающая как "Application.OnTime"?
Никто не подскажет?
...
Рейтинг: 0 / 0
VBA: сложная функция
    #37108369
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studieren,

если у вас Access, то я перенесу топик в соответсвующий форум.
...
Рейтинг: 0 / 0
VBA: сложная функция
    #37108499
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
big-dukestudieren,

если у вас Access, то я перенесу топик в соответсвующий форум.

Но вопрос-то по большому счёту касается только VBA?
...
Рейтинг: 0 / 0
VBA: сложная функция
    #37108556
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studierenGreen2Задача вообще какая стоит, ради чего это надо?

Для решения одной частной задачки в MS Access мне требуется подобная функция.
А как реализовать в VBA многопоточность? DoEvents?
Без задачки все равно непонятно, почему нельзя сделать
Код: plaintext
1.
2.
3.
4.
Function МояФункция() AS Boolean
    ...
    МояФункция = True
    НекаяПроцедура
End Function
потому что в ТЗ написано именно это.

И чем вас не устраивает DoEvents в пустом цикле процедуры тоже непонятно
...
Рейтинг: 0 / 0
VBA: сложная функция
    #37108574
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кажется вот это 9787536 больше подойдёт. Там код с Win API функциями.
Попробую экспериментировать.
...
Рейтинг: 0 / 0
VBA: сложная функция
    #37108666
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProБез задачки все равно непонятно, почему нельзя сделать
Код: plaintext
1.
2.
3.
4.
Function МояФункция() AS Boolean
    ...
    МояФункция = True
    НекаяПроцедура
End Function
потому что в ТЗ написано именно это.

И чем вас не устраивает DoEvents в пустом цикле процедуры тоже непонятно

Задачку не могу описать здесь, тогда точно модератор выгонит топик в MS Access.
Модератор:
Не говорите ерунды. Это было лишь предложение перейти в Access.

Поменять местами функцию и процедуру также не подходит. Я наверное неправильно (не точно) написал ТЗ: функция не только должна возвращать значение, но также прекратить свою работу.
Мне просто "DoEvents" без подтверждения завершении работы функции также не интересно. Для этого пожалуй использую "flag" как посоветовал .Михаил. Т.е. внутри функции в самом начале будет "flag = True", а перед самым завершением напишу "flag = False". А процедура проверит значение flag, если оно true, значит функция всё-ещё работает, а если false, вот здесь процедура начнёт основную свою работу.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA: сложная функция
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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