Добрый день, уважаемые форумчане!
В Экселе на VBA написал код, обрабатывающий события листа (операции с комбобоксами), код работает правильно, быстро и хорошо, но стоит запустить параллельно другой файл Excel (без всяких макросов), как все начинает дико тормозить, и в строке состояния видно, что постоянно выполняются расчеты. Методом проб и ошибок выяснил, что виной код именно на листе (не в отдельном модуле). Как я понял, при открытии другого файла этот код пытается обработать данные другого файла, хотя экранирован с помощью Private Sub. Еще момент, если сделать копию этого же файла и запустить параллельно оба, то никаких тормозов не наблюдается.
Просто у меня 10 таких листов с подобными кодами обрабатывающие каждый свои комбобоксы (данные для комбобоксов берутся из сводных таблиц).
Код прилагаю:
Прочитал про опцию Option Private Module, но она не работает на листах, а только в отдельных модулях. Но видимо нужно нечто подобное.
Прошу помощи.
В Экселе на VBA написал код, обрабатывающий события листа (операции с комбобоксами), код работает правильно, быстро и хорошо, но стоит запустить параллельно другой файл Excel (без всяких макросов), как все начинает дико тормозить, и в строке состояния видно, что постоянно выполняются расчеты. Методом проб и ошибок выяснил, что виной код именно на листе (не в отдельном модуле). Как я понял, при открытии другого файла этот код пытается обработать данные другого файла, хотя экранирован с помощью Private Sub. Еще момент, если сделать копию этого же файла и запустить параллельно оба, то никаких тормозов не наблюдается.
Просто у меня 10 таких листов с подобными кодами обрабатывающие каждый свои комбобоксы (данные для комбобоксов берутся из сводных таблиц).
Код прилагаю:
Код |
---|
Private Sub ComboBox1_Change() On Error Resume Next Dim listname As String listname = "=Изд1" ThisWorkbook.Sheets(listname).Range("a3").Value = ThisWorkbook.Sheets(listname).ComboBox1.Value ThisWorkbook.Sheets("Список всех элементов").Range("g1").Value = ThisWorkbook.Sheets(listname).ComboBox1.Value End Sub Private Sub ComboBox2_Change() On Error Resume Next Dim listname As String listname = "=Изд1" ThisWorkbook.Sheets(listname).Range("a4").Value = ThisWorkbook.Sheets(listname).ComboBox2.Value End Sub |
Прошу помощи.