Где-то прочитал, что макросы параллельно выполнять нельзя. По жизни так оно почти всегда и было. Часто, пока один макрос скачивает из интернета в эксель базу данных, из-за этого не удается работать с макросами в других книгах. Приходилось останавливать закачку, открывать другую книгу, выполнять иную работу, связанную с макросами, затем по окончании возобновлять прерванные закачки. Или пока один макрос делает сложные расчеты, невозможно вообще открыть другую книгу эксель. Таких примеров было множество.
Недавно посетила мысль, что проблема в том, что приложение Excel, если оно уже открыто, пытается при двойном клике в своем же процессе открыть и новую книгу. А если открывать книги в разных процессах, тогда проблем с параллельно работающими макросами быть не должно.
Проверил свою мысль в офисе 2003 на Win XP. Все макросы в разных книгах отлично работают параллельно. Чтобы книги Excel открывались не в одном, а каждая в своем индивидуальном процессе, сделал так, как
предложил гугл.Открыл "Мой компьютер/сервис/свойства папки/типы файлов
Нашел расширение .xls
Для него нажал кнопку "Дополнительно"
В разделе "Действия:" выбрал пункт меню "Открыть" и нажал кнопку "Изменить"
В разеделе "Приложение, выполняющее действие:" стояла такая запись
"C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" /e
Я добавил в конце параметр "%1", получилась следующая запись
"C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" /e "%1"
В интернете советовали убрать птичку DDE, я так и сделал. Хотя, при написании этого поста я повторно повторил действия, птичка оказалась вновь установлена. Возможно, ее наличие/отсутствие не важно.
Теперь все макросы у меня работают параллельно. Думаю, эта идея может пригодится для тех, кто хочет распараллелить расчеты сложных вычислений в Excel. Нужно ещё обкатать детали самому, но если даже не получится выполнять макросы в параллель через CreateObject("Excel.Application"), то запускать параллельную обработку расчетов через Shell Workbook.xls вполне реально. Параллельные процессы можно сделать невидимыми как минимум через WinAPI.