Как сделать макрос для автоматического изменения исходных данных Диаграммы в Excel на VBA
Формулировка задачи:
Здравствуйте уважаемые спецы.
Два дня перелопачиваю инет ища примеры, но так ничего и не получилось.
Задача в следующем
Есть таблица с данными в разное время. Я построил гистограмму по первому ряду значений.
Time An18 An17 An16 An15 An14 An13 An12 An11 An10
11:12:55 AM 2.05 1.98 1.89 1.87 1.74 2.71 2.91 2.25 1.29
11:12:57 AM 2.03 1.97 1.95 1.86 1.94 2.66 2.68 2.16 1.25
11:12:59 AM 1.96 1.92 1.94 1.92 1.79 2.47 2.33 2.08 1.20
11:13:01 AM 1.91 1.91 1.96 2.01 1.85 2.12 1.80 2.09 1.29
Теперь я хочу чтобы через, например, секунду график перерисовывался со следующей строкой значений (всего строк около 1000), т.е. рисовалась гистограмма для следующего момента времени и т.д. пока все не прорисуются. Так сказать анимацию сделать. С VBA не знаком вообще. Только с фортраном и паскалем (вычисления делал, никакой графики).
Я пробовал записать макрос вручную меняя диапозон со значениями, так я понял смысл, где меняется диапозон в программе. Осталось его зациклить и вставить задержку. Поискав разные примеры в инете, что-то сделал, но при запуске появляется ошибка, и я ничего не пойму, что дальше.
Помогите, пожалуйста. Выкладываю две версии как я пробовал реализовать макрос.
Sub Macro5()
'
' Macro5 Macro
' Macro recorded 11/4/2010
'
ActiveChart.ChartType = xl3DColumnClustered
Do Until i = 100
yy = i + 7
'хотел изменять только диапозон B8:AM8, начиная с 8 строки и дальше вниз
ActiveChart.SetSourceData Source:=Sheets("Data").Range(Cells(yy, 3), Cells(yy, 20)), PlotBy:= _
xlRows
y = Timer + 0.5
Do While Timer < y
DoEvents
Loop
Loop
End Sub
Но получил ошибку
Run-time error ‘1004’:
Method ‘Cells’ of object ‘_Global’ failed
Покополся дальше нашел пример на этом форуме Excel,VBA: Указание диапазонов для диаграммы
и сделал так
Sub Macro5()
'
' Macro5 Macro
' Macro recorded 11/4/2010
'
For i% = 1 To 50
yy = i + 7
a = Range(Cells(7, 3), Cells(7, 20)).Address
b = Range(Cells(yy, 3), Cells(yy, 20)).Address
Sheets("Data").ChartObjects(1).Activate
ActiveChart.ChartType = xl3DColumnClustered
ActiveChart.SetSourceData Source:=Sheets(1).Range(a + "," + b), _
PlotBy:=xlRows _
y = Timer + 0.5
Do While Timer < y
DoEvents
Loop
Next i
End Sub
Вылазит та же ошибка и дебаг в обоих случаях ведет на строку где первый раз встречается Cells
Подскажите, пожалуйста, как до ума довести программу
Два дня перелопачиваю инет ища примеры, но так ничего и не получилось.
Задача в следующем
Есть таблица с данными в разное время. Я построил гистограмму по первому ряду значений.
Time An18 An17 An16 An15 An14 An13 An12 An11 An10
11:12:55 AM 2.05 1.98 1.89 1.87 1.74 2.71 2.91 2.25 1.29
11:12:57 AM 2.03 1.97 1.95 1.86 1.94 2.66 2.68 2.16 1.25
11:12:59 AM 1.96 1.92 1.94 1.92 1.79 2.47 2.33 2.08 1.20
11:13:01 AM 1.91 1.91 1.96 2.01 1.85 2.12 1.80 2.09 1.29
Теперь я хочу чтобы через, например, секунду график перерисовывался со следующей строкой значений (всего строк около 1000), т.е. рисовалась гистограмма для следующего момента времени и т.д. пока все не прорисуются. Так сказать анимацию сделать. С VBA не знаком вообще. Только с фортраном и паскалем (вычисления делал, никакой графики).
Я пробовал записать макрос вручную меняя диапозон со значениями, так я понял смысл, где меняется диапозон в программе. Осталось его зациклить и вставить задержку. Поискав разные примеры в инете, что-то сделал, но при запуске появляется ошибка, и я ничего не пойму, что дальше.
Помогите, пожалуйста. Выкладываю две версии как я пробовал реализовать макрос.
Sub Macro5()
'
' Macro5 Macro
' Macro recorded 11/4/2010
'
ActiveChart.ChartType = xl3DColumnClustered
Do Until i = 100
yy = i + 7
'хотел изменять только диапозон B8:AM8, начиная с 8 строки и дальше вниз
ActiveChart.SetSourceData Source:=Sheets("Data").Range(Cells(yy, 3), Cells(yy, 20)), PlotBy:= _
xlRows
y = Timer + 0.5
Do While Timer < y
DoEvents
Loop
Loop
End Sub
Но получил ошибку
Run-time error ‘1004’:
Method ‘Cells’ of object ‘_Global’ failed
Покополся дальше нашел пример на этом форуме Excel,VBA: Указание диапазонов для диаграммы
и сделал так
Sub Macro5()
'
' Macro5 Macro
' Macro recorded 11/4/2010
'
For i% = 1 To 50
yy = i + 7
a = Range(Cells(7, 3), Cells(7, 20)).Address
b = Range(Cells(yy, 3), Cells(yy, 20)).Address
Sheets("Data").ChartObjects(1).Activate
ActiveChart.ChartType = xl3DColumnClustered
ActiveChart.SetSourceData Source:=Sheets(1).Range(a + "," + b), _
PlotBy:=xlRows _
y = Timer + 0.5
Do While Timer < y
DoEvents
Loop
Next i
End Sub
Вылазит та же ошибка и дебаг в обоих случаях ведет на строку где первый раз встречается Cells
Подскажите, пожалуйста, как до ума довести программу
Решение задачи: «Как сделать макрос для автоматического изменения исходных данных Диаграммы в Excel на VBA»
textual
Листинг программы
LastRow=Range(<font color="teal">"A1"</font>).CurrentRegion.Rows.Count
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д