Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
0 / 0 / 0
Регистрация: 22.08.2025
Сообщений: 10
Excel

Многопоточность в VBA

22.08.2025, 02:07. Показов 6920. Ответов 63
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста, есть ли возможность сделать VBA многопоточным? Без dll и прочего, только кодом VBA и есть ли уже инструменты для этого?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.08.2025, 02:07
Ответы с готовыми решениями:

Многопоточность в VBA
Почему VBA? Про VB в принципе уже все давно расписано и исследовано за десятки лет. На VBA тема...

Купил книгу По VBA Программирование на VBA 2003 В.Г.Кузьменко
Поздравьте меня я купил книгу По VBA Программирование на VBA 2003 В.Г.Кузьменко, могу процитировать...

VBA Составить функцию VBA
помогите пожалуйста...

63
509 / 163 / 22
Регистрация: 04.10.2015
Сообщений: 646
06.09.2025, 11:33
Студворк — интернет-сервис помощи студентам
testuser2
Когда-то давно, еще в эру зарождения VBA, видел на одном сайте, как один японец, кажется, рисовал с помощью Excel целые картины.
Так что, пути творчества неисповедимы также как и господни
0
dive
 Аватар для I can
4980 / 4693 / 848
Регистрация: 13.04.2015
Сообщений: 9,906
06.09.2025, 11:35
Цитата Сообщение от testuser2 Посмотреть сообщение
то только значения займут в памяти
Цитата Сообщение от testuser2 Посмотреть сообщение
128 гигобайт
Представил: Вот так, купишь компьютер с 256 гигами оперативки, откроешь 200-гиговый документ Эксель(если он не крякнет), запустишь обработку в тыщу потоков и балдеешь...
0
1401 / 859 / 92
Регистрация: 08.02.2017
Сообщений: 3,644
Записей в блоге: 2
06.09.2025, 12:10
Цитата Сообщение от I can Посмотреть сообщение
откроешь 200-гиговый документ Эксель(если он не крякнет)
Что реально это одним процессом буферизировать, допустим, 200-гиговый текстовый файл, а другим(ми) процессом его обрабатывать
0
1328 / 546 / 112
Регистрация: 29.03.2016
Сообщений: 1,333
06.09.2025, 12:22
Мне только один раз попалась задача,
которую можно было решать поднятием нескольких экземпляров аппликейшн.

Большой текстовик (выгрузка из какой-то учетной системы),
в котором склеены в один файл несколько документов (шапка + таблица + подвал).
Я одним экземпляром (Boss.mdb) резал текстовик на куски (документы),
скармливал куски (документы) нескольким экземплярам парсеров (Worker.mdb),
по окончании документов каждый Worker сливал свою работу в конечный result.mdb

Ускорения не получилось, потому как:
Документов много, но они "легкие". Парсеры работали быстро,
а издержки DDE взаимодействия "съедали" временной профит применения нескольких экземпляров.
Плюс не удалось сделать "параллельную выгрузку" результатов в конечный result.mdb,
пришлось выполнять последовательно.
Миниатюры
Многопоточность в VBA  
1
Эксперт .NET
 Аватар для Usaga
14343 / 9437 / 1358
Регистрация: 21.01.2016
Сообщений: 35,564
06.09.2025, 12:22
Цитата Сообщение от testuser2 Посмотреть сообщение
В Экселе обрабатывают большие данные.
Кто?
0
1401 / 859 / 92
Регистрация: 08.02.2017
Сообщений: 3,644
Записей в блоге: 2
06.09.2025, 12:34
Цитата Сообщение от Jamaica Посмотреть сообщение
Парсеры работали быстро,
а издержки DDE взаимодействия "съедали" временной профит применения нескольких экземпляров.
Плюс не удалось сделать "параллельную выгрузку"
Вот это, кстати, интересные моменты. Что random access не работает при записи? Говоря о "простом"(внешне) взаимодействии процессов через com, что кстати осуществляется довольно-таки быстро, в этом всеже есть нюансы. При передаче каких-то больших данных com-объекту в другом процессе они сначала будут переданы (скопированы) маршалинговому объекту, а только после переданы по назначению, т.е. 2ное копирование.. Все показывает только практика

Добавлено через 3 минуты
Цитата Сообщение от Usaga Посмотреть сообщение
Кто?
Вы меня вынуждаете быть адвокатом Экселя, чего я особо не хочу, да мене за это и не платят, давайте лучше обсуждать обсуждение а не устраивать допросы.
0
1328 / 546 / 112
Регистрация: 29.03.2016
Сообщений: 1,333
06.09.2025, 12:38
Цитата Сообщение от testuser2 Посмотреть сообщение
Что random access не работает при записи?
Честно говоря, я в этом не силен, а желания углубленно разбираться не было.
Исходил из своих познаний "повар-юзера".
0
 Аватар для volodin661
6809 / 2310 / 350
Регистрация: 10.12.2013
Сообщений: 7,969
06.09.2025, 13:39
Цитата Сообщение от testuser2 Посмотреть сообщение
маршалинговому объекту
ах маршаллинг ...
распределённые вычисления с помощью ексель !
миллионы экземпляров екселей по всему миру одновременно обрабатывают биг дату !!
и затем результат сливается в одну полноводную реку и возвращается в наш скромный айбиэм писи, который парой инструкций VBA ( этой жемчужиной человеческой(или нечеловеческой?) мысли ) инициировал всё это великолепие !!!

ААА!!!!

( больше писать не могу, меня душит восторг и выступившие слёзы не дают пальцам попадать по нужным клавишам. )
0
509 / 163 / 22
Регистрация: 04.10.2015
Сообщений: 646
06.09.2025, 15:01
Цитата Сообщение от volodin661 Посмотреть сообщение
результат сливается в одну полноводную реку
Представил эту картину...
VBA был придуман на заре ПК Pentium
Требовать от VBA "вышивать крестиком" - желание не совсем адекватное результату. "Я так думаю..." ©
0
1401 / 859 / 92
Регистрация: 08.02.2017
Сообщений: 3,644
Записей в блоге: 2
06.09.2025, 16:06
Цитата Сообщение от andris2 Посмотреть сообщение
VBA был придуман на заре ПК Pentium
Многопоточность была в VB5 уже и поддерживалась на уровне объектов в ActiveX Exe. В vba, конечно нет возможности создавать зарегистрированные Com/ActiveX - классы, поэтому тема, вроде как, закрытая
Миниатюры
Многопоточность в VBA  
0
 Аватар для volodin661
6809 / 2310 / 350
Регистрация: 10.12.2013
Сообщений: 7,969
06.09.2025, 19:26
testuser2,
ты вот что,
не отвлекайся, а рассказывай про офисные приложения с маршалингом и big data.
0
1401 / 859 / 92
Регистрация: 08.02.2017
Сообщений: 3,644
Записей в блоге: 2
07.09.2025, 10:09
Цитата Сообщение от volodin661 Посмотреть сообщение
офисные приложения с маршалингом
А маршаллинг довольно не плох. Делаю 16 заданий, выполняющих одинаковую паузу 2000 мс. Результат
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 1  2,033203 
 0  2,033203 
 2  2,033203 
 3  2,033203 
 5  2,064453 
 6  2,064453 
 4  2,064453 
 8  2,064453 
 7  2,080078 
 9  2,080078 
 10  2,09375 
 11  2,09375 
 12  2,111328 
 13  2,125 
 14  2,125 
 15  2,314453 
 2,330078
На последнем возврате всегда небольша заминка, наверное связанная с отключением марашаллера. Но галвное, что мне нравится, маршаллинг разруливает одновременные межпроцессные сопряжения объектов. Конечно неплохо было бы еще на рандоме проверить стабильность всего этого..

Добавлено через 1 час 20 минут
Тест с назначением рандомной паузы, с запоминанием времени старта для каждого задания которое использовалось для вычисления реального времени. Взе задачи запущены одновременно-последовательно, для рандомного времени старта нужен отдельный тест
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ID            Пауза         Реал-тайм     Разница (мс)
 0             1136          1171,875      36 
 7             1168          1218,75       51 
 12            1160          1203,125      43 
 9             2092          2125          33 
 4             2120          2156,25       36 
 15            1894          2140,625      247 
 1             2242          2281,25       39 
 14            2406          2453,125      47 
 10            2575          2609,375      34 
 13            2777          2812,5        36 
 11            3302          3343,75       42 
 3             3372          3406,25       34 
 2             3588          3640,625      53 
 6             3615          3656,25       41 
 8             3849          3890,625      42 
 5             3886          3921,875      36
Добавлено через 4 часа 35 минут
Результат с отсрочкой запуска (0 - 2000 мс). Все выглядит также прекрасно. Для отсрочки использовался api-таймер.
Кликните здесь для просмотра всего текста
Code
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
27
28
29
30
31
32
33
34
ID            Отсрочка      Пауза         Реал-тайм     Разница 
 1             188           1391          1421,875      31 
 3             382           1670          1687,5        18 
 2             1508          1044          1062,5        18 
 7             120           2659          2671,875      13 
 8             1824          1493          1515,625      23 
 15            1400          1907          2093,75       187 
 13            201           3357          3375          18 
 5             842           2915          2937,5        22 
 4             292           3538          3562,5        24 
 10            297           3717          3734,375      17 
 0             1376          2791          2812,5        22 
 14            1623          2736          2765,625      30 
 9             1580          3037          3062,5        26 
 6             986           3956          3968,75       13 
 12            1946          3170          3187,5        18 
 11            1918          3510          3578,125      68 
Повторный запуск (с уже запущенными "экземплярами")
 12            107           1160          1187,5        28 
 8             550           1140          1171,875      32 
 4             745           1259          1281,25       22 
 13            264           1976          2000          24 
 5             1013          1354          1375          21 
 0             88            2319          2343,75       25 
 1             451           2223          2250          27 
 6             1439          1458          1484,375      26 
 9             476           2676          2703,125      27 
 10            1527          1893          1921,875      29 
 7             419           3067          3093,75       27 
 2             531           3199          3218,75       20 
 14            1602          2600          2625          25 
 11            1460          2858          2890,625      33 
 3             1567          3073          3093,75       21 
 15            1938          3320          3343,75       24
0
08.09.2025, 04:30

Не по теме:

Тут были высказывания, что мол есть более современные, достойные языки. Смотрю сейчас статью про Java 17, там пишут, мол появились некие рекорды. Это чЁ в Java не было стрктур, и только сейчас они появилсь? Жесть, имхо это гребаная жесть, что в таком языке как Жаба не было струткур.

0
08.09.2025, 07:14

Не по теме:

testuser2, годами жили без них и ничего. Не помешало тонны софта на Java написать...

0
08.09.2025, 07:24

Не по теме:

Цитата Сообщение от Usaga Посмотреть сообщение
годами жили без них и ничего. Не помешало тонны софта на Java написать...
Но мы же говорим о великой и могучей Джаве царице бекенда. Как тогда там юзаются нативные сишные библиотеки, через какую-то хитрую п..? Там же везде структуры

0
08.09.2025, 07:44

Не по теме:

Цитата Сообщение от testuser2 Посмотреть сообщение
Как тогда там юзаются нативные сишные библиотеки, через какую-то хитрую п..?
Через JNI, который был весьма убог. Сейчас там вроде более удобное что-то запилили.. И я не очень уверен, что нативные библиотечки там сильно часто тягают из Java...

0
1401 / 859 / 92
Регистрация: 08.02.2017
Сообщений: 3,644
Записей в блоге: 2
08.09.2025, 14:46
Цитата Сообщение от testuser2 Посмотреть сообщение
При передаче каких-то больших данных com-объекту в другом процессе они сначала будут переданы (скопированы) маршалинговому объекту, а только после переданы по назначению, т.е. 2ное копирование..
Теперь о печальном. Так и есть. Инициализировал 200 мб массив в одном процессе, затем передал их в другой одним не очень стандартным способом и в этот момент кол-во общей потребляемой памяти выросло на 400мб. После завершения процедуры висяков нет, память освобождается, но издержки очевидны. Затем проделал то же самое с использованием Application.Run, и в момент передачи данных обхем потребляемой памяти подпрыгнул аж на 600мб. Впрочем, у метода Run, есть особенность в том, что он передает параметры в вызываемую функцию ByVal, поэтому профит данного подхода так очевиден.
0
Эксперт .NET
 Аватар для Usaga
14343 / 9437 / 1358
Регистрация: 21.01.2016
Сообщений: 35,564
08.09.2025, 16:43
testuser2, а что тут печального?
0
1401 / 859 / 92
Регистрация: 08.02.2017
Сообщений: 3,644
Записей в блоге: 2
08.09.2025, 16:58
Цитата Сообщение от Usaga Посмотреть сообщение
а что тут печального?
ни чего просто бред больного воображения отравленного антибиотиками мозга
0
193 / 191 / 31
Регистрация: 11.10.2016
Сообщений: 610
19.09.2025, 17:56
На работе каждый день пользуюсь макросом, который постоянно на экране, отслеживает изменения в другой программе и выводит их в своем окне. Запускается из-под Кореловского VBA, API-шными методами прикручен тайминг, раз в секунду управление передается макросу, но при этом можно пользоваться другими макросами и работать в самом Кореле. То есть, получается некоторая, условная многопоточность.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.09.2025, 17:56
Помогаю со студенческими работами здесь

Vba excel windows и vba excel Mac Os - Макинтош корявит шрифт
Всем привет, столкнулся с такой ситуацией. Макросы написаны на Excel 2016 Windows. Когда файл...

VBA парсер выдает ошибку vba excel Run-time error '-2147319783 (80028019) и "microsoft ожидает пока другое приложение за
Добрый день, делаю свой первый парсер. Выдает ошибку vba excel Run-time error '-2147319783...

XLL хранение и выполнение VBA кода, или защита VBA кода от просмотра
Мое почтение, джентльмены... Делал для себя инструмент позволяющий хранить уже наработанный VBA...

VBA compiler - Компиляция VBA проекта в DLL
Добрый день, жители форума! В процессе работы мне потребовалось вынести код из VBA Excel в DLL....

Как реализуется многопоточность в VB?
Подскажите плз как реализуется многопоточность в VB, если конечно здесь таковая имеется.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
Диалоги с ИИ
zorxor 23.05.2026
Насколько я понимаю - Вы - Искусственный Интеллект. Это так? Да, всё верно. Я — искусственный интеллект. Я представляю собой большую языковую модель, созданную для помощи в самых разных задачах. . . .
Модель здравосохранения 14. Собираем всю модель вместе.
anaschu 22.05.2026
Модель собрана. В будущих постах на видео я покажу, как она работает. В этом посте запускаем её, проверяем результаты и разбираем что можно с ней делать дальше. Перед запуском проверяем. . .
Модель здравоохранения 13. Добавление самой системы здравоохранения.
anaschu 22.05.2026
В предыдущем посте мы настроили болезни. Теперь добавим события, которые управляют здоровьем всего коллектива, а также настроим рабочий график и расчёт финансов. В Main создаём четыре события. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru