Но вот, несмотря на потраченное время поиска, как из этой строки постоянно обновляющихся данных выносить на другой лист в эксель книге данные. Т.е. как появились данные - записать первой строкой, далее как только данные обновятся - записать следующей строкой, и т.д.
Хочу обратить ваше внимание что данные тиковые, т.е. как только обновляются так и так и обновляются ячейки, а не с постоянной периодичностью - например раз в секунду. Такое же обновление и у времени которое в формате:
LastTime
1539377999
Которое тоже непонятно как перевести в нормальное отображение, например через "Формат ячеек" и функции: времени, даты - почему-то не получается( Я эксель не сказал бы что первый раз вижу, но всё же. Да и у меня уже фантазия закончилась по справкам искать и спросить не у кого. Надеюсь на вашу помощь. Заранее благодарен.
Исходя из вашего описания, я понял следующее. На одном листе у вас появляются данные в режиме реального времени(функция ДРВ), а вы хотите при обновлении данные в этом листе, копировать в новую строчку в другой лист?
Jungl, здравствуйте. Примерно так, т.е. на первом листе данные в режиме реального времени, которые с разной частотой обновляются. На втором листе как бы ведётся журнал истории всех обновлений, причём каждое обновление записывается сверху вниз на отдельной строке.
БМВ, вы имеете ввиду сначала проверять ложь/истина, потом по условию (со встроенной внутренней переменной счётчика строк) копировать на другой лист? Я не сильно разбираюсь в эксель, но по моему это пять или больше действий будет. При 10 обновлений в секунду или не будет подтормаживать весь процесс? Или вы другой алгоритм имели ввиду (если не трудно укажите какие функции)?
garysanders написал: При 10 обновлений в секунду или не будет подтормаживать весь процесс?
ЭЭЭЭЭ . Ну действия не сложные и даже 10 раз в секунду современный комп обработает нормально. Это не функции листа естевенно, это только VBA код. 1. событие Worksheet_Calculate должно быть при обновлении, ну по крайней их описания этой функции вроде следует, но надо проверить 2. соответственно Private Sub Worksheet_Calculate() там проверяем равенство полученных данных с последним их журнала на другом листе 3. Если не равно, то копируем в журнал , если равно, то ничего не делаем.
Единственное что надо , это немного оптимизировать сравнение, чтоб не тратит время на поиск последней строки протокола ….
Был бы пример, пусть даже не рабочий из-за отсутствия RTM сервера, то можно б было смоделировать , чтоб потом не править.
БМВ, к сожалению примера нет, только данные в реалтайме в эксель понятно как было сделать. Про 10 запросов это я через эксель имел ввиду, через VBA думаю сильно побыстрее будет, но я к сожалению с VBA ещё хуже чем с эксель) Последнюю строку протокола я думаю сделать либо через внутреннюю переменную+1 или давать каждым строкам протокола уникальный номер. Буду пытаться обновлять знания VBA, да и может в эксель что получится. Благодарю вас за ответы, а сам ухожу в недры поиска решения) Да и поздравляю с вашим 6666 сообщением на этой теме)))
garysanders, поищите инфо про DDE. Есть эмулятор DDE. Сделайте с его помощью файл пример. Например, покажите в файле места приёма информации и куда и как информация должна записываться при изменении + вручную сделайте якобы зафиксированные изменения. Тогда помогающим будет легче понять Вашу задачу. Когда на основе эмулятора получите то что нужно, то просто в ячейки-источники пропишите свои ДРВ. Я так вижу.
Формула массива (ФМ) вводится Ctrl+Shift+Enter Memento mori
Пример "Copy of пример373.xlsm" предложенный БМВ, примерно то что и нужно.
Используя предложенный JayBhagavan, DDE симулятор максимальная пропускная способность "Copy of пример373.xlsm" файла составляла 9,3 сообщения в секунду, а на RTDServer мои данные шлются со скоростью 4 сообщения в секунду, что больше чем в два раза, а процесс экселя использовал малую нагрузку на процессор. Это я так, вдруг интересно.
И это всё нормально "на костылях", но правда доработать чуть-чуть нужно (ошибки иногда выскакивают, не сохраняются данные и т.д.) да и на реальных данных пока нет возможности опробовать, но уже неплохо.