Как анимировать график, созданный в VBA, с использованием массивов - PullRequest
0 голосов
/ 01 августа 2020

Я написал код, который обновляет точечную диаграмму в vba с использованием массивов. Моя цель - делать все в vba за пределами Excel. Я запускаю программу из Excel, нажав кнопку. Я могу изменять и обновлять график через определенные промежутки времени. Но я не вижу, как график развивается, т.е. я не могу видеть график, пока VBA-скрипт не будет завершен. Как сделать график живым во время работы программы. Моя конечная цель - очищать данные с веб-сайта каждые 15 секунд, производить некоторые вычисления и отображать их развитие на графике.

Sub test3()
Dim C As Chart
Dim s As Series
Dim myData, A, B, D As Variant
ReDim A(50, 1), B(50, 1), D(50, 1)
Set C = ActiveSheet.Shapes.AddChart.Chart
With C
    Set s = C.SeriesCollection.NewSeries
    Set v = C.SeriesCollection.NewSeries
    C.ChartType = xlXYScatterLines
End With
x = Timer()
xxx = x
While xx - x < 30
    xx = Timer()
    If xx - xxx > 2 Then
        i = i + 1
        A(i, 1) = 0.6 * i
        B(i, 1) = xx - x
        D(i, 1) = i ^ 0.5
        myData = A '
        myData1 = B '
        myData2 = D
    With C
        Set s = C.SeriesCollection(1)
        s.XValues = myData1
        s.Values = myData
        Set v = C.SeriesCollection(2)
        v.XValues = myData1
        v.Values = myData2
    End With
    xxx = Timer()
    End If
Wend
End Sub

1 Ответ

0 голосов
/ 01 августа 2020
  1. Во-первых, хорошо бы правильно объявить все используемые переменные:
Dim C As Chart
Dim s As Series, v As Series, x As Double, xx As Double, xxx As Double
Dim myData, myData1, myData2, A, B, D As Variant, i As Long

Пожалуйста, позаботьтесь, чтобы myData, myData1, myData2, A, B были из Variant тип, потому что Excel делает это, если вы ничего не указываете о типе. Не потому, что перечисление заканчивается на D As Variant. Я имею в виду, что в следующем примере объявления

Dim x, y, z As Long

Только z является типом Long. x и y - это тип «Вариант» ...

Затем вставьте DoEvents после xx = Timer():
'...
'your code...
    xx = Timer()
    DoEvents
'your code...
'...
...