Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Обратная связь с диалоговым окном - синхронизация данных - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Обратная связь с диалоговым окном - синхронизация данных (Макросы/Sub)
Обратная связь с диалоговым окном - синхронизация данных
Stork4ever Дата: Воскресенье, 10.09.2017, 11:29 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Прошу помощи у профессионалов, поскольку так и не смог разобраться самостоятельно и найти решение на форуме и в интернете.

Существует большой файл Excel с множеством данных и вычислений на разных листах. Сейчас создаю диалоговое окно, которое будет отображаться постоянно на всех листах книги, на котором будут отображены сводные итоги и ключевые параметры влияющие на расчеты. Данные можно менять, как в самой книге, так и в диалоговом окне. При этом нужна оперативная синхронизация данных между книгой и диалоговым окном.

При запуске диалогового окна происходит инициализация параметров UserForm_Initialize(), но поскольку обратная связь организована через Workbook_SheetCalculate процесс инициализации происходит с огромной циклической задержкой (это можно отследить в пошаговом режиме работы макроса). Если в тестовом файле запуск формы происходит быстро (при количестве циклов 25), то в реальном файле сейчас 2473 цикла, при том, что еще не все параметры выведены. Как правильно организовать синхронизацию параметров?
К сообщению приложен файл: Test1.xls(95Kb)
 
Ответить
СообщениеПрошу помощи у профессионалов, поскольку так и не смог разобраться самостоятельно и найти решение на форуме и в интернете.

Существует большой файл Excel с множеством данных и вычислений на разных листах. Сейчас создаю диалоговое окно, которое будет отображаться постоянно на всех листах книги, на котором будут отображены сводные итоги и ключевые параметры влияющие на расчеты. Данные можно менять, как в самой книге, так и в диалоговом окне. При этом нужна оперативная синхронизация данных между книгой и диалоговым окном.

При запуске диалогового окна происходит инициализация параметров UserForm_Initialize(), но поскольку обратная связь организована через Workbook_SheetCalculate процесс инициализации происходит с огромной циклической задержкой (это можно отследить в пошаговом режиме работы макроса). Если в тестовом файле запуск формы происходит быстро (при количестве циклов 25), то в реальном файле сейчас 2473 цикла, при том, что еще не все параметры выведены. Как правильно организовать синхронизацию параметров?

Автор - Stork4ever
Дата добавления - 10.09.2017 в 11:29
InExSu Дата: Воскресенье, 10.09.2017, 13:39 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 243
Репутация: 29 ±
Замечаний: 80% ±

Excel 2010
На бегу.
Закидывайте данные листов в массивы и уже из массивов распределяйте.
Если не любите массивы, тогда конструкции типа:
[vba]
Код
  Me.CheckBox1.Value = Sheets("Люди").Range("IVANOV").Value
  Me.CheckBox2.Value = Sheets("Люди").Range("PETROV").Value
  Me.CheckBox3.Value = Sheets("Люди").Range("SIDOROV").Value
  Me.TextBox1.Value = Sheets("Люди").Range("C2").Value
  Me.TextBox2.Value = Sheets("Люди").Range("C3").Value
  Me.TextBox3.Value = Sheets("Люди").Range("C4").Value
[/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
[/vba]
 
Ответить
СообщениеНа бегу.
Закидывайте данные листов в массивы и уже из массивов распределяйте.
Если не любите массивы, тогда конструкции типа:
[vba]
Код
  Me.CheckBox1.Value = Sheets("Люди").Range("IVANOV").Value
  Me.CheckBox2.Value = Sheets("Люди").Range("PETROV").Value
  Me.CheckBox3.Value = Sheets("Люди").Range("SIDOROV").Value
  Me.TextBox1.Value = Sheets("Люди").Range("C2").Value
  Me.TextBox2.Value = Sheets("Люди").Range("C3").Value
  Me.TextBox3.Value = Sheets("Люди").Range("C4").Value
[/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
[/vba]

Автор - InExSu
Дата добавления - 10.09.2017 в 13:39
Stork4ever Дата: Воскресенье, 10.09.2017, 17:11 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Это упрощает код (что я в примере сознательно не делал), но не решает проблемы.
 
Ответить
СообщениеЭто упрощает код (что я в примере сознательно не делал), но не решает проблемы.

Автор - Stork4ever
Дата добавления - 10.09.2017 в 17:11
al-Ex Дата: Воскресенье, 10.09.2017, 21:47 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 186
Репутация: 59 ±
Замечаний: 0% ±

Excel 2010
обратная связь организована через Workbook_SheetCalculate
Попробовать иначе?
1,Например "привязаться" к другому событию, допустим: - " Workbook_SheetSelectionChange", так как сделано в приложенном файле.

2.Или поиграть с этим свойством:
[vba]
Код

Application.Calculation = xlCalculationManual ' отключаем автоматический пересчёт на время работы макроса
Application.Calculation = xlCalculationAutomatic ' возвращаем автоматический пересчёт в конце работы макроса.
[/vba]
К сообщению приложен файл: Test1V2.xls(94Kb)


Сообщение отредактировал al-Ex - Воскресенье, 10.09.2017, 22:38
 
Ответить
Сообщение
обратная связь организована через Workbook_SheetCalculate
Попробовать иначе?
1,Например "привязаться" к другому событию, допустим: - " Workbook_SheetSelectionChange", так как сделано в приложенном файле.

2.Или поиграть с этим свойством:
[vba]
Код

Application.Calculation = xlCalculationManual ' отключаем автоматический пересчёт на время работы макроса
Application.Calculation = xlCalculationAutomatic ' возвращаем автоматический пересчёт в конце работы макроса.
[/vba]

Автор - al-Ex
Дата добавления - 10.09.2017 в 21:47
Stork4ever Дата: Понедельник, 11.09.2017, 00:03 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Буду пробовать.

В первом варианте работа с галочками не возвращает данные в диалоговое окно (хотя меняет значение ячейки на ИСТИНА/ЛОЖЬ). Нужно пробовать.
Во втором варианте - идея хорошая. Надо по экспериментировать.


Сообщение отредактировал Stork4ever - Понедельник, 11.09.2017, 15:31
 
Ответить
СообщениеБуду пробовать.

В первом варианте работа с галочками не возвращает данные в диалоговое окно (хотя меняет значение ячейки на ИСТИНА/ЛОЖЬ). Нужно пробовать.
Во втором варианте - идея хорошая. Надо по экспериментировать.

Автор - Stork4ever
Дата добавления - 11.09.2017 в 00:03
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Обратная связь с диалоговым окном - синхронизация данных (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!