Arhlit - информационные технологии

Динамическое обновление диаграммы Excel с задержками

Я прочитал строку данных с прибора, используя Excel VBA. Я хотел бы динамически отображать данные на активной диаграмме Excel НЕМЕДЛЕННО после того, как они были прочитаны. Мне нужно ждать и читать данные каждые 5 секунд, а тем временем я «сплю» либо с помощью команды VBA Application.Wait, либо с помощью команды Kernel32 Sleep. В любом случае активная диаграмма НЕ обновляется. Полный сюжет появляется только после ПОСЛЕДНЕГО «сна». Любые предложения будут оценены.

Вот упрощенный код

Sub New_Data(indx)
Dim x As Integer

While True

    x = Read_Instrument(1)
    y = Read_Instrument(2)
    Cells(indx, 1) = x
    Cells(indx, 2) = y

    ActiveSheet.ChartObjects.Item(1).Activate
    ActiveChart.FullSeriesCollection(1).XValues = "=Sheet1!$A$1:$A$" & indx
    ActiveChart.FullSeriesCollection(1).Values = "=Sheet1!$B$1:$B$" & indx

    indx = indx + 1
    Sleep 5000  'Use the KERNEL32 Sleep function for 5000 milliseconds
Wend
End Sub
26.05.2017

  • Нам нужно увидеть некоторый код, чтобы догадаться, что не так с вашим текущим подходом. С этой небольшой информацией кажется, что Worksheet_Change - это путь. 26.05.2017
  • Перед любой попыткой решения я предлагаю назвать ваш объект Chart и получить его дескриптор, а не activechart и т. д. ActiveChart может работать, но ваш код будет проще обрабатывать и позволит избежать проблем с фокусировкой. Также Cells(indx, 1) = x устанавливает значения в конце каждый раз? Снова уточните этот вызов ячеек с помощью объекта рабочего листа, например SheetCodeName.Cells(indx, 1) = x и т. д. 26.05.2017
  • Я очень новичок в VBA и не знаком со всеми его расширенными функциями. Я был бы признателен за некоторую информацию относительно (1) того, как назвать и получить дескриптор объекта Chart и как использовать его дескриптор позже, и (2) как квалифицировать вызов Cells с объектом Worksheet. Вы можете использовать код, который размещен выше, в качестве примера. Благодарю вас! 27.05.2017

Ответы:


1

Wait и Sleep будут поддерживать работу VBA, поэтому экран не будет обновляться. Попробуйте использовать Application.OnTime в этих строках (в стандартном модуле кода, т.е. Module1).

Sub refreshMyChart()
   Dim indx as long: indx = sheet1.Cells(Rows.Count, 1).End(xlUp).offset(1)

   Cells(indx, 1) = Read_Instrument(1)
   Cells(indx, 2) = Read_Instrument(2)

   With Sheet1.ChartObjects(1).FullSeriesCollection(1)
     .XValues = "=Sheet1!$A$1:$A$" & indx
     .Values = "=Sheet1!$B$1:$B$" & indx
  End With

  ''''' Now Schedule the same routine for 5 seconds later''''''''''
  Application.OnTime Now + TimeSerial(0,0,5), "refreshMyChart"
  ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
End Sub

p.s.: имейте в виду, что эти данные не могут расти бесконечно. Вы должны определить какой-либо способ остановить или удалить старые строки, чтобы количество отображаемых строк данных было разумным.

26.05.2017

2

Превосходно! Большое тебе спасибо. Я не знал о конструкции .OnTime Application.OnTime Now + TimeSerial(0, 0, 5), «refreshMyChart» и о том, что VBA допускает рекурсивные процедуры. Что касается завершения цикла, там есть код, который я не публиковал, потому что он не имел отношения к проблеме. Вот это If Int(current_index / nmeasure) * nmeasure > finalval Then MsgBox ("Конец измерения") Exit Sub End If

Спасибо еще раз.

26.05.2017
Новые материалы

12 сайтов с искусственным интеллектом, которые поразят вас
Приготовьтесь поразить воображение Сегодня существует несколько веб-сайтов, использующих искусственный интеллект (ИИ). От индивидуальных рекомендаций по новостям до более умных поисковых..

Скрытый технический долг в системах машинного обучения [NeurIPS 2015]
Что такое технический долг? Технический долг — это метафора, введенная Уордом Каннингемом в 1992 году, чтобы объяснить долгосрочные затраты, связанные с быстрым продвижением в разработке..

Алгоритм быстрой сортировки в Python
Всем привет, добро пожаловать на programminginpython.com . Здесь я покажу вам, как реализовать алгоритм быстрой сортировки в Python. В предыдущих статьях я рассмотрел Сортировку вставкой ,..

Как использовать манипулирование объектами в JavaScript
Объекты являются важным строительным блоком JavaScript. Они позволяют группировать свойства и методы вместе. Объект представляет собой набор свойств. Свойства идентифицируются с..

Разработка игр с помощью Godot Engine: мощный инструмент с открытым исходным кодом
Разработка игр — творческий и сложный процесс, требующий множества навыков и инструментов. Одним из наиболее важных инструментов является игровой движок, который представляет собой программную..

От XML к аннотациям: переход к современной конфигурации Spring
Введение Фреймворк Spring претерпел значительную эволюцию с момента своего создания. Одним из заметных изменений стал переход от конфигураций на основе XML к конфигурациям, управляемым..

Я люблю Руби!
Я люблю Руби! Мне это нравится по той же причине, по которой мне нравится программировать на Python. Он настолько интуитивно понятен, а встроенные методы упрощают решение проблем. Если вы..