Прошу помощи у профессионалов, поскольку так и не смог разобраться самостоятельно и найти решение на форуме и в интернете.
Существует большой файл Excel с множеством данных и вычислений на разных листах. Сейчас создаю диалоговое окно, которое будет отображаться постоянно на всех листах книги, на котором будут отображены сводные итоги и ключевые параметры влияющие на расчеты. Данные можно менять, как в самой книге, так и в диалоговом окне. При этом нужна оперативная синхронизация данных между книгой и диалоговым окном.
При запуске диалогового окна происходит инициализация параметров UserForm_Initialize(), но поскольку обратная связь организована через Workbook_SheetCalculate процесс инициализации происходит с огромной циклической задержкой (это можно отследить в пошаговом режиме работы макроса). Если в тестовом файле запуск формы происходит быстро (при количестве циклов 25), то в реальном файле сейчас 2473 цикла, при том, что еще не все параметры выведены. Как правильно организовать синхронизацию параметров?
Прошу помощи у профессионалов, поскольку так и не смог разобраться самостоятельно и найти решение на форуме и в интернете.
Существует большой файл Excel с множеством данных и вычислений на разных листах. Сейчас создаю диалоговое окно, которое будет отображаться постоянно на всех листах книги, на котором будут отображены сводные итоги и ключевые параметры влияющие на расчеты. Данные можно менять, как в самой книге, так и в диалоговом окне. При этом нужна оперативная синхронизация данных между книгой и диалоговым окном.
При запуске диалогового окна происходит инициализация параметров UserForm_Initialize(), но поскольку обратная связь организована через Workbook_SheetCalculate процесс инициализации происходит с огромной циклической задержкой (это можно отследить в пошаговом режиме работы макроса). Если в тестовом файле запуск формы происходит быстро (при количестве циклов 25), то в реальном файле сейчас 2473 цикла, при том, что еще не все параметры выведены. Как правильно организовать синхронизацию параметров?Stork4ever
with Sheets("Люди") Me.CheckBox1.Value = .Range("IVANOV").Value Me.CheckBox2.Value = .Range("PETROV").Value Me.CheckBox3.Value = .Range("SIDOROV").Value Me.TextBox1.Value = .Range("C2").Value Me.TextBox2.Value = .Range("C3").Value Me.TextBox3.Value = .Range("C4").Value end with
[/vba]
и даже на
[vba]
Код
with Sheets("Люди") with .Range("IVANOV") Me.CheckBox1.Value = .Value Me.CheckBox2.Value = .Value Me.CheckBox3.Value = .Value end with with .Range("C2") Me.TextBox1.Value = .Value Me.TextBox2.Value = .Value Me.TextBox3.Value = .Value end with end with
[/vba]
На бегу. Закидывайте данные листов в массивы и уже из массивов распределяйте. Если не любите массивы, тогда конструкции типа: [vba]
with Sheets("Люди") Me.CheckBox1.Value = .Range("IVANOV").Value Me.CheckBox2.Value = .Range("PETROV").Value Me.CheckBox3.Value = .Range("SIDOROV").Value Me.TextBox1.Value = .Range("C2").Value Me.TextBox2.Value = .Range("C3").Value Me.TextBox3.Value = .Range("C4").Value end with
[/vba]
и даже на
[vba]
Код
with Sheets("Люди") with .Range("IVANOV") Me.CheckBox1.Value = .Value Me.CheckBox2.Value = .Value Me.CheckBox3.Value = .Value end with with .Range("C2") Me.TextBox1.Value = .Value Me.TextBox2.Value = .Value Me.TextBox3.Value = .Value end with end with
обратная связь организована через Workbook_SheetCalculate
Попробовать иначе? 1,Например "привязаться" к другому событию, допустим: - " Workbook_SheetSelectionChange", так как сделано в приложенном файле.
2.Или поиграть с этим свойством: [vba]
Код
Application.Calculation = xlCalculationManual ' отключаем автоматический пересчёт на время работы макроса Application.Calculation = xlCalculationAutomatic ' возвращаем автоматический пересчёт в конце работы макроса.
обратная связь организована через Workbook_SheetCalculate
Попробовать иначе? 1,Например "привязаться" к другому событию, допустим: - " Workbook_SheetSelectionChange", так как сделано в приложенном файле.
2.Или поиграть с этим свойством: [vba]
Код
Application.Calculation = xlCalculationManual ' отключаем автоматический пересчёт на время работы макроса Application.Calculation = xlCalculationAutomatic ' возвращаем автоматический пересчёт в конце работы макроса.
В первом варианте работа с галочками не возвращает данные в диалоговое окно (хотя меняет значение ячейки на ИСТИНА/ЛОЖЬ). Нужно пробовать. Во втором варианте - идея хорошая. Надо по экспериментировать.
Буду пробовать.
В первом варианте работа с галочками не возвращает данные в диалоговое окно (хотя меняет значение ячейки на ИСТИНА/ЛОЖЬ). Нужно пробовать. Во втором варианте - идея хорошая. Надо по экспериментировать.Stork4ever
Сообщение отредактировал Stork4ever - Понедельник, 11.09.2017, 15:31