Здравствуйте! Ни как не могу наладить одновременный запуск макросов в книгах, которые открываются в новых потоках.
Сначала я создаю копию книги, затем, оставаясь в текущем экземпляре книги, открываю её копию в Новом Потоке и хочу запустить выполнения долго расчета (Поиск решения). Но проблема в том, что при запуске макроса в первой книге макрос во второй книге запустится только после выполнения в первой.
Если делать запуск не в цикле, а в единичном случае, то основная книга остается "висеть" до выполнения макроса в её копии.
Если запускать руками, то каждый файл запускается без проблем! (100% загрузка ЦП).
Могу ли я как-то после запуска макроса вернуть управление основной книге и дальше идти по циклу? Или может хотя бы можно полностью остановить выполнение кода в основной книге (тогда смогу сделать 10 кнопок)?
Буду признателен за помощь, спасибо!
Код
Public newXLAppArr(1 To 10) As Variant
Public Sub creatNewVAR(ByVal varnum)
FilePathh = ThisWorkbook.path & "\VAR_" & varnum& ".xlsm"
ThisWorkbook.SaveCopyAs filename:=FilePathh
If Dir(FilePathh) <> "" Then
Set newXLAppArr(varnum) = New Excel.Application
With newXLAppArr(varnum)
.Workbooks.Open FilePathh
.WindowState = xlMaximized
.Visible = True
End With
newXLAppArr(varnum).Application.Run "RunTestMacros"
End If
End Sub
...
for i=1 to 10
call creatNewVAR(i)
next
bedvit, Нет, когда запускаю руками, то все работает. Идет 100% загрузка ЦП. Если мне удастся прервать ожидание выполнения макроса и запустить второй, то все будет работать. Но я не знаю, как прервать ожидание выполнения
vainu написал: Нет, когда запускаю руками, то все работает. Идет 100% загрузка ЦП.
Это потому, как я и писал выше, транслятор VBA выполняет код в "однопоточном" режиме, да вы сделали новый поток через New, транслятор выполняет код для нового потока (все предыдущие заморожены), после завершения кода в новом потоке, транслятор продолжает выполнять код в предыдущем потоке и т.д. для всех новых потоков. В VBA нет штатного механизма распараллеливания потоков/расчетов. А когда вы запускаете руками, вы используете ресурсы системы, которая прекрасно работает в многопоточном режиме. Вы, наверное, так и не смотрели, ссылку, которую я вам скинул. Можно попробовать через костыль