Анимированный график свечей с использованием VBA [закрыто]
Я взялся за сложную работу по анимации 5-минутного свечного графика из данных открытия, максимума и минимума закрытия в Excel 2007. Вся основная работа по анимации с использованием vba выполнена. Анимация хорошо работает для каждого тика в 1 минуту с интервалом ожидания в 1 секунду для каждого тика в 1 минуту, но я застрял в месте, чтобы показать линию тренда, которая движется вверх и вниз вместе с ценой закрытия.
Может ли кто-нибудь помочь мне в том, как я могу анимировать пунктирную линию вверх и вниз на каждом тике с ее ценой закрытия? Условие состоит в том, что если цена закрытия меньше, чем цена открытия для этого конкретного тика, тогда цвет линии и текста должен измениться на красный, значение также должно быть изменено, а линия должна переместиться к цене закрытия. Точно так же, если закрытие больше открытия для этого тика, тогда цвет должен быть зеленым, а если открытие и закрытие одинаковы, тогда цвет должен быть черным.
Прошу вас, ребята, помочь мне в том же.
PS: Это кросс-пост. опубликовано на форуме ниже, но не получил ответа. https://www.excelforum.com/excel-programming-vba-macros/1341860-animated-candlestick-chart-using-vba.html
Мой код может быть не очень эффективным, поскольку я не профессионал, вы можете изменить его, чтобы повысить его эффективность.
Sub Reset_Candles()
Range("C18:G43").ClearContents
End Sub
Sub Animate_Candles()
Dim LastRow As Long
Dim StartRow As Long
Dim i As Long
Dim minVal As Long
Dim maxVal As Long
Dim minmax As Range
StartRow = 18
LastRow = Range("I" & Rows.Count).End(xlUp).Row
Set minmax = Sheet1.Range("J1:M" & LastRow)
minVal = Application.WorksheetFunction.Min(minmax)
maxVal = Application.WorksheetFunction.Max(minmax)
maxVal = maxVal + (maxVal * 0.005)
minVal = minVal - (minVal * 0.005)
With ActiveSheet.ChartObjects(1).Chart.Axes(xlValue)
.MinimumScale = minVal
.MaximumScale = maxVal
End With
Range("B18:G18").Value = Range("I18:N18").Value
For i = StartRow + 1 To LastRow
DoEvents
If Trim(Range("I" & i).Value) = Trim(Range("B" & StartRow + 1).Value) Then
StartRow = StartRow + 1
Range("B" & StartRow & ":G" & StartRow).Value = Range("I" & i & ":N" & i).Value
End If
If Range("K" & i).Value > Range("D" & StartRow).Value Then
Range("D" & StartRow).Value = Range("K" & i).Value
End If
If Range("L" & i).Value < Range("E" & StartRow).Value Then
Range("E" & StartRow).Value = Range("L" & i).Value
End If
Range("F" & StartRow).Value = Range("M" & i).Value
Application.Wait (Now + TimeValue("0:00:01"))
DoEvents
Next i
End Sub
Ссылка на Google диск для загрузки файла https://drive.google.com/file/d/1aiF8b__Ezn1HmPsz0mtGBM1AcfLtLAD6/view?usp=sharing