Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.95/19: Рейтинг темы: голосов - 19, средняя оценка - 4.95
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2

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

01.07.2023, 15:39. Показов 8281. Ответов 102

Студворк — интернет-сервис помощи студентам
Почему VBA? Про VB в принципе уже все давно расписано и исследовано за десятки лет. На VBA тема менее популярна, по в принципе понятным причинам, по скольку, там она не сильно так уж и нужна. Мне также в ней нет особой необходимости, просто некоторый интерес прощупать эту тему с точки зрения "простого обывателя", на сколько далеко можно зайти и т.д.
Вообще, говоря, на VBA есть довольно простая и удобная не очень изящная возможность организовать "потоки" за счет запуска нескольких копий приложения, также можно делать на VBS.
Далее простой пример (в файле), назовем "Игра - Останови колобка если сможешь!" ). В примере все не очень оптимально, и нет какого-то полезного шаблона, но как мне кажется хорошо видно работу т.н. маршаллинга, его усточивую работу, даже при не очень, как бы правильной ситации. При запуске множества экземпляров Экселя и их одновременному обращению к одному и тому же объекту, все продолжает работать довольно устойчиво при том, что объектная модель отдельного Экселя "общается" со всеми в одном потоке или точнее из одного потока. Видимо маршаллинг все разруливает.
В данном примере, не мало важно, что рабоает пропуск ошибок и doevents. Если попытаться реализовать подобное с помощью win-api то с этим уже появляются некоторые проблеммки.. и бог весть еще с чем, а вот при работе разных экземпляров Эксель все очень просто.
Вложения
Тип файла: zip Колобок.zip (20.7 Кб, 32 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.07.2023, 15:39
Ответы с готовыми решениями:

VBA → SSMS → VBA. Вызов хранимой процедуры SSMS из VBA с возвратом 2ух и более параметров
Приветствую! Учусь наполнять таблицу SQL из таблицы Excel. Беру таблицу в массив и построчно вызываю хранимку с передачей очередного...

Программа в VBA для проверки гипотез про равенство средних - VBA
В своё время прогулял лекции по VBA, а теперь жалею! Кто может помочь с написанием проги по проверке гипотез про равенство средних?

VBA и Oracle: stored procedure из VBA и сохранение текста в переменной
Добрый день, Кто-нибудь сталкивался с проблемой выполнения функции Oracle, т.н. Oracle stored procedure, и сохранением результата в...

102
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2
04.07.2023, 16:02  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от HackerVlad Посмотреть сообщение
**
А может быть нужная "божественная инициализация"? Вот сейчас открыл, добавил CoinitializeEx, работает вродь не вышибает, даже код можно править "на ходу".
Кликните здесь для просмотра всего текста
Visual Basic
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
Option Explicit
Public Declare Function CoInitializeEx Lib "ole32.dll" (ByVal pvReserved As Long, ByVal dwCoInit As Long) As Long
 
Public Function GOOGLETRANSLATE(text As String, source_language As String, target_language As String) As String
    Dim URL As String, XMLHTTPS As MSXML2.ServerXMLHTTP60
    Dim HTML As Object, HTMLDc As HTMLDocument, Class As HTMLDivElement
    CoInitializeEx 0&, 0&
    On Error Resume Next
    Set XMLHTTPS = New MSXML2.ServerXMLHTTP60
    Set HTML = New HTMLDocument
    
    URL = "https://translate.google.com/m?sl=" & source_language & "&tl=" & target_language & "&hl=en&ie=UTF-8&q=" & RussianStringToURLEncode$(text)
    XMLHTTPS.Open "GET", URL, False
    XMLHTTPS.setTimeouts 1000000, 1000000, 1000000, 1000000
    XMLHTTPS.setRequestHeader "User-Agent", "Mozilla/5.0 (compatible;MSIE 6.0; WindowsNT 10.0))"
    XMLHTTPS.send ""
    HTML.Open
    HTML.write XMLHTTPS.responseText
    HTML.Close
    
    Set HTMLDc = HTML
    Set Class = HTMLDc.getElementsByClassName("result-container")(0)
    If Not Class Is Nothing Then
        GOOGLETRANSLATE = Class.innerText
    End If
    Set Class = Nothing
    Set HTML = Nothing
    Set HTMLDc = Nothing
    Set XMLHTTPS = Nothing
    CoUninitialize
End Function


Добавлено через 12 минут
Цитата Сообщение от locm Посмотреть сообщение
Для VBA есть компилятор с поддержкой многопоточности?
Там есть компилятор, но ни кто ни когда его не видит, и полагаю, что не знает, что он поддерживает. VB6 ведь дефакто поддерживает многопоточность. VBA вроде тоже устойчиво дежрит потоки если обращаться не к объектным типам данных. Не знаю, на сколько это все устойчиво, а вот если допустим расширяемую память использовать.., в общем надо экспериментировать. Тому кому это надо, а я так из интереса, может быть что-то выясню, уже много чего выяснил.
На самом деле работают параллельные потоки в VBA если взять не googletranslate а какой-то простой код, цикл do loop и выводить в одном потоке, допутим, время, в другом счетчик, в третьем бибипку - работает, завершается корректно.
А вот на сколько это может быть стабильно при реальных нагружных задачах и если запустить, допустим, 10 потоков, это конечно вопрос.
0
Эксперт по электронике
7239 / 3417 / 348
Регистрация: 28.10.2011
Сообщений: 13,462
Записей в блоге: 7
04.07.2023, 16:09
Цитата Сообщение от testuser2 Посмотреть сообщение
Там есть компилятор, но ни кто ни когда его не видит
Может потому что его нет, а код интерпретируется?

Цитата Сообщение от testuser2 Посмотреть сообщение
VB6 ведь дефакто поддерживает многопоточность.
При определенных условиях и выполняя ряд требований. Просто так не получится создать обычный exe или процедурную dll и не предпринимая специальных мер запустить VB функцию в потоке. Точнее запустить конечно можно, но стабильной работы не будет.
2
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2
04.07.2023, 17:28  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
А многопоточки-то и нету
А, кстати, если паузу в секунду добавить в поток, сымитировав продолжительную задачу, то она (многопоточнсть) таки проявляется
Code
1
2
3
b34224031  e34224531 
 b34224343  e34224812 
34010968-34011171 =-203
Вообще у меня там многое неправльно, если рельно задумываться о скорости, то нужно было запустить потоки, и держать их в памяти запущенными периодичеки останавливая и возвобноляя функциями suspendthread/resumethread, а не так как в данном случае, каждый раз запускается поток, инициализируется, инициализируютя объекты внутри потока, и потом только выполняется задача... Кстати, время в потоках лучше замерять апишными функциями (GetTikCount), стандартный Timer похоже не потокобезопасный

Добавлено через 9 минут
Цитата Сообщение от locm Посмотреть сообщение
Может потому что его нет, а код интерпретируется?
VBA - это VB, засунутый в приложение, комприлируемый только в p-code. Проверял, скорость, такая же как у VB6 p-code, это порядка -20-50% медленнее нативного VB, который в простых операциях примерно эквивалентен по скорости PB и FB. Интерпретируемый он или нет, он очень быстрый, и в софтверных решениях по прежнему не имеет равных аналогов в скорости и в мн. др. показателях.
0
Вернулся
 Аватар для HackerVlad
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
04.07.2023, 18:04
Цитата Сообщение от testuser2 Посмотреть сообщение
функциями suspendthread/resumethread
Ой, не рекомендую ими пользоваться вообще. Очень глючные.
1
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2
04.07.2023, 19:10  [ТС]
Цитата Сообщение от HackerVlad Посмотреть сообщение
Ой, не рекомендую ими пользоваться
ну и ладно, другие знаем )

Добавлено через 8 минут
Хотя подожди, Дидье эти функции использует, должны быть хорошие..

Добавлено через 50 минут
В общем много чего еще надо будет проверить.
Дополнительную память потоками не отхапать. Если в одном потоке создаю массив arr(131000000), то второй уже жалуетс на "Out of memory", елси только расширяемую память использовать.. или многопроцессный подход
0
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
04.07.2023, 20:10
Цитата Сообщение от testuser2 Посмотреть сообщение
Главным образом интересно, если такая dll сможет выполнять процедуры взятые из VBA в параллельных потоках. С использованием ActiveX -VB6 библиотеки есть такая возможность, и есть коенчо ряд нюансов, например, что библиотека должна быть скомпилирована в p-код. Тут наверное играет роль, что VB6 и VBA очень родственные среды..
В VBA (как и в VB6-IDE) используются глобальные данные которые никак не изолированы между потоками. Никакой стабильной работы не будет. Для стабильной работы нужно создавать отдельный процесс с VBA и в нем уже выполнять обработку.

Цитата Сообщение от locm Посмотреть сообщение
При определенных условиях и выполняя ряд требований.
Это почти везде так. Из коробки есть ActiveX-EXE с Thread-per-object.
2
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2
04.07.2023, 23:53  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
В VBA (как и в VB6-IDE) используются глобальные данные которые никак не изолированы между потоками.
Спасибо за разъяснение, наводит на мысль. В vba отдельные документы то грузятся, в одном процессе, но данные у них изолировыны, даже может быть разный набор подключаемых библиотек. В связи с этим идея насоздавать, допустим несколько однотипных книг Эксель, которые использовать "держателями" для потоков. Проканывает даже така тема - можно взять книгу (делаем доступной только для чтения), насоздавать на нее жестких ссылок, назначить им имена типа Thread1, Thread2.. и можно открыть их все в Экселе и спользовать т.ск. Зацените идею. )

Не по теме:

ЗЫ. Как тебе такое Илон Маск?

0
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2
05.07.2023, 00:21  [ТС]
В свойствах любой книги VBproject есть эта интересная строка..
Миниатюры
Многопоточность в VBA  
0
Эксперт по электронике
7239 / 3417 / 348
Регистрация: 28.10.2011
Сообщений: 13,462
Записей в блоге: 7
05.07.2023, 00:28
Цитата Сообщение от The trick Посмотреть сообщение
Для стабильной работы нужно создавать отдельный процесс с VBA и в нем уже выполнять обработку.
Это не многопоточность, которая подразумевает несколько потоков в рамках процесса.

Цитата Сообщение от The trick Посмотреть сообщение
Из коробки есть ActiveX-EXE
Собственно об этом и писал.

Цитата Сообщение от testuser2 Посмотреть сообщение
Дополнительную память потоками не отхапать.
x64 это решает.
0
Вернулся
 Аватар для HackerVlad
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
05.07.2023, 02:16
testuser2, я если честно без понятия, я не спец по VBA
0
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2
05.07.2023, 18:03  [ТС]
В общем, по итогу нескольких дней мытарств можно подвести некоторые итоги. Авторитеты высказались, можно даже не спорить, все действительно так и выглядит. Особенно остро стит вопрос стабильности, когда дело касается ком-объектов, это такие сложные и капризные штуки, которые требуют к себе должного внимания и отношения. С ними в потоках лучше не связываться, хотя я думаю ,все-таки читать, брать от них информацию все-таки можно, безопаснее, а вот что-то посылать на ком-объект в потоке, не стоит.
А так выглядят 4 (следом 3) одновременно запущенных пустых цикла. 4 я не смог завершить корректно, а 3 спокойно завершились по нажатию кнопки.
Кликните здесь для просмотра всего текста
Visual Basic
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Public Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Long, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long
Private Declare Function SuspendThread Lib "kernel32.dll" (ByVal hThread As Long) As Long
Private Declare Function ResumeThread Lib "kernel32.dll" (ByVal hThread As Long) As Long
Public Declare Function TerminateThread Lib "kernel32.dll" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Declare Sub Sleep Lib "kernel32" (ByVal milliseconds As Long)
 
Private Const CREATE_SUSPENDED = &H4
 
Sub StartThread()
    Dim i&
    flag0 = 1
    For i = 0 To 2
        hThreads(i) = CreateThread(ByVal 0&, 0&, AddressOf Thread0, ByVal 0&, CREATE_SUSPENDED, 0)
        Sleep 20
    Next
    For i = 0 To 2
      Sleep 20
      DoEvents
      ResumeThread hThreads(i)
    Next
    Sleep 50
    DoEvents
    Do While flag0
        DoEvents
        Sleep 100
    Loop
    Sleep 1000
    For i = 0 To 2
        Sleep 50
        DoEvents
        TerminateThread hThreads(i), ByVal 0&
        CloseHandle hThreads(i)
    Next
End Sub
 
Sub StopThread() 'Процедуру повесить на кнопку
    flag0 = 0
End Sub
 
Private Sub Thread0(ByVal unuse As Long)
    CoInitialize ByVal 0&
    On Error Resume Next
    
    Do While flag0
    Loop
    
    CoUninitialize
End Sub
Миниатюры
Многопоточность в VBA  
1
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
05.07.2023, 22:43
Цитата Сообщение от locm Посмотреть сообщение
Это не многопоточность, которая подразумевает несколько потоков в рамках процесса.
Как не многопоточность? Код выполняется в разных потоках? В разных.
0
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2
06.07.2023, 03:36  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
4 я не смог завершить корректно
улучшил механизм остановки потоков, задекларировал поточные функции в tlb (кроме CreateThread, сложноватая), а также Sleep. Теперь завершаются корректно даже 4 потока с пустыми циклами
Кликните здесь для просмотра всего текста
Visual Basic
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Public Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Long, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long
 
Private Const CREATE_SUSPENDED = &H4
Private flag0&
 
Sub StartThread()
    const CntT& = 3 '(4)колличество потоков
    Dim i&
    flag0 = 1
    For i = 0 To CntT
        hThreads(i) = CreateThread(ByVal 0&, 0&, AddressOf Thread0, ByVal 0&, CREATE_SUSPENDED, 0) 'VarPtr(arrOut(0))
        Sleep 20
    Next
    For i = 0 To CntT
      Sleep 20
      DoEvents
      ResumeThread hThreads(i)
    Next
    Sleep 50
    DoEvents
    Do While flag0
        DoEvents
        Sleep 100
    Loop
    Sleep 2000 'даем время потокам на остановку циклов
    For i = 0 To CntT
        Sleep 50
        DoEvents
        SuspendThread hThreads(i)
        TerminateThread hThreads(i), ByVal 0&
        CloseHandle hThreads(i)
    Next
End Sub
 
Sub StopThread()
    flag0 = 0
End Sub
 
Private Sub Thread0(ByVal unuse As Long)
    CoInitialize ByVal 0&
    On Error Resume Next
    
    Do While flag0
    Loop
    
    CoUninitialize
    Sleep 3000 'ставим поток на паузу, чтобы завершить его "вручную" (TerminateThread)
End Sub
0
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2
06.07.2023, 04:10  [ТС]
tlb
Миниатюры
Многопоточность в VBA  
Вложения
Тип файла: zip VBMultithreadHlp.zip (981 байт, 6 просмотров)
1
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2
06.07.2023, 07:48  [ТС]
100 потоков получилось запустить, и корректно остановить (но с большим риском чувствуется) главное паузы по больше проставлять, чтобы не в коем случае потоки сами н завершались, а только через Terminate.

Добавлено через 3 часа 7 минут
А вот реальные вычисления не вывозит, для проверки брал тест уважаемого Майкла и поместил его в цикл поточной процедуры. Вышибает в процессе либо при завершении. Примерно понимаю, что наверное лучше процедуры для потоков лучше брать из разных мест (или вообще весь код помещать в поточной процедуре). В общем еще один вывод напрашивается, что вызов простых вычислительных процедур из потока чреват..
0
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
06.07.2023, 11:11
testuser2, почему бы не сделать в разных процессах? Это будет стабильно и параллельно.
0
Эксперт по электронике
7239 / 3417 / 348
Регистрация: 28.10.2011
Сообщений: 13,462
Записей в блоге: 7
06.07.2023, 12:12
Цитата Сообщение от The trick Посмотреть сообщение
Как не многопоточность? Код выполняется в разных потоках? В разных.
https://ru.wikipedia.org/wiki/Многопоточность
Многопото́чность (англ. Multithreading) — свойство платформы (например, операционной системы, виртуальной машины и т. д.) или приложения, состоящее в том, что процесс, порождённый в операционной системе, может состоять из нескольких потоков, выполняющихся «параллельно», то есть без предписанного порядка во времени.

Сутью многопоточности является квазимногозадачность на уровне одного исполняемого процесса, то есть все потоки выполняются в адресном пространстве процесса. Кроме этого, все потоки процесса имеют не только общее адресное пространство, но и общие дескрипторы файлов. Выполняющийся процесс имеет как минимум один (главный) поток.

Многопоточность (как доктрину программирования) не следует путать ни с многозадачностью, ни с многопроцессорностью, несмотря на то, что операционные системы, реализующие многозадачность, как правило, реализуют и многопоточность.
Исчерпывающий ответ или подробнее объяснить?

Цитата Сообщение от The trick Посмотреть сообщение
почему бы не сделать в разных процессах? Это будет стабильно и параллельно.
Будут сложности при межпроцессном взаимодействии.
В пределах процесса у потоков общее адресное пространство и у потоков есть доступ ко всем переменным. Процессы изолированы и переменные в отдельных адресных пространствах. Это создает дополнительные сложности и увеличивает накладные расходы обмена данными.
2
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2
06.07.2023, 12:14  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
testuser2, почему бы не сделать в разных процессах? Это будет стабильно и параллельно.
Это отдельная тем, уже недавно также исследованная мной, но там все оказалось слишком уж просто, до скукаты. Создал расширяемую память в одном Экслеле, в другом подкючился к ней, создал указатель на участок этой памяти (по вашей статье про указатели) в одной и в др. программе. В итоге получился один указатель на двух прогах, причем со скоростью доступа такой же как у обычной переменной - Все - вопрос исчерпан - в одной программе можно управлять процессом в другой, на самой возможной скорости. +ко всему стабильност. Вопрос исчерпан, более чего-то интересного в нем уже не нати. А здесь все загадочно и неизведанно. ) Надо бы еще испытать, колхоз, описанный в #27, и, думаю, вопрос также будет исчерпан.
0
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2
06.07.2023, 13:32  [ТС]
Касаемо #35, вот еще какая мысль из наблюдений заметил такое, что созданный поток очень зависит от запустившей его процедуры и если она прерывается, то поток, становится как бы более нестабильным. Бегло смотрел справку, вроде бы там есть про это. Причем если из процедуры, создавшей поток, вызвать другую процедуру, то она как быпрерывается и рушится связь с потоком или что, в общем вызывающая процедура должна быть все время в активном состоянии. Собственно я этот шаблон увидел у Трика в данной теме и с этого-то мне стало интересно проверить, что может быть возможно создать хотябы какой-нибудь устойчивый колхоз. Плюс к этому я скачал на одном сайте код с аннотацией "простой пример", где показано как создать две анимированные картинки. Код 2001 года, там нет инициализации в com и ожидания завершения потока запускающей процедурой, а потоки запускаются в экземпляре класса при том анимация работает. Я пробовал перетащить этот класс в vba, но в vba поток не запускается из класса.
Вложения
Тип файла: zip multithreading_in_vb.zip (15.0 Кб, 3 просмотров)
0
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
06.07.2023, 13:37
locm, многопоточность в vba/vb6 основывается на COM, а именно на Single-threaded апартаментах. Свободная модель потоков не поддерживается (в вб6 только с ограничениями). Для программиста в COM нет разницы где расположен апартамент - в другом потоке текущего процесса (in-proc) или потке другого процесса (out-of-proc) или даже компьютера. Для него доступ к объекту осуществляется прозрачно. https://learn.microsoft.com/en... apartments
Как написал testuser2 через расшаренную память все также быстро и параллельно работает. Более того без проблем работают потоки с разной битностью, т.е. потоки могут иметь разную разрядность.

testuser2, стабильной работы ты точно не добьёшься через сырые потоки, т.к. поддерживается только STA причём виртуальная машина вба работает в своём главном sta. Любой прямой вызов -это нарушение потоковой модели COM.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.07.2023, 13:37

VBA-проект для создания эл. сообщения в MS Outlook из-под любого VBA-приложения.
Охотно поделюсь этим своим проектом, который можно скачать с http://moscowjobs.narod.ru/mailmngr.html. Вам понадобится WinZip и MS Word...

VBA AutoCad - как снять (изменить) ограничение времени выполнения VBA Макроса?
Столкнулся с проблемой в Автокад 2012 х64 win7 Run-time error(...): Automation error System call failed - возникает если макросы...

VBA SDK. Как включить в проект на VBA конструкторы?
Всем, добрый день! Если кто-то работал с сабжом - не могу понять, как включить в проект на VBA конструкторы, как-то: DataEnvironment,...

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

Как получить ссылку на VBA-объект Application в DLL, которая привязана к этому VBA-приложению
Т.е. ситуация обычная - имеем DLL, сделанную в VB, которая может быть привязана к MsOffice приложениям - Access,Word,Excel . Как в этой...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru