2014-02-14 2 views
1

Я довольно новичок в использовании VBA, особенно для форматирования диаграммы в Excel, но уже столкнулся с проблемой. Я пытаюсь создать график, но строки опорных ячеек будут меняться в зависимости от доступных данных.Функция VBA для динамической адаптации диапазона данных диаграммы

Прямо сейчас, мои данные находятся в диапазоне AE741: AG762, но на следующей итерации строка может отличаться. Можете ли вы помочь мне написать код, который динамически адаптирует диапазон данных диаграммы в зависимости от моих данных? То, что у меня под рукой, является ссылкой на строку (т. Е. Для каждой итерации я знаю, где мои данные начинаются и заканчиваются, в данном случае 741 - 762). У меня также есть адресный адрес диапазона в другой ячейке, так что в моем случае ячейка Y10 принимает значение AE741: AG762.

Я предполагаю, что единственное, что мне нужно (но не удалось сделать), - это присвоить это значение диапазона моей функции VBA.

Chart_Test Macro 
Set myRange = Workbook().Worksheet(3).Cell(25, 10).Value 
ActiveSheet.Shapes.AddChart.Select 
ActiveChart.ChartType = xlLine 
ActiveChart.SetSourceData Source:=Range("AE741:AG762") 
ActiveChart.SeriesCollection(2).Select 
ActiveChart.SeriesCollection(2).AxisGroup = 2 
ActiveChart.SeriesCollection(2).Select 
ActiveChart.Legend.Select 
Selection.Delete 
ActiveChart.Axes(xlCategory).Select 
ActiveChart.SeriesCollection(2).Select 
ActiveChart.SeriesCollection(2).ChartType = xlColumnClustered 
ActiveChart.SeriesCollection(2).Select 
With Selection.Format.Fill 
    .Visible = msoTrue 
    .ForeColor.ObjectThemeColor = msoThemeColorAccent6 
    .ForeColor.TintAndShade = 0 
    .ForeColor.Brightness = -0.25 
    .Transparency = 0 
    .Solid 
End With 
ActiveChart.SeriesCollection(1).Select 
With Selection.Format.Line 
    .Visible = msoTrue 
    .ForeColor.RGB = RGB(0, 176, 240) 
    .Transparency = 0 
End With 
End Sub 

Спасибо за высокую оценку! Benjamin

ответ

0

Изменить эти строки:

Set myRange = Workbook().Worksheet(3).Cell(25, 10) 
ActiveChart.SetSourceData Source:=Range("AE741:AG762") 

Для таких:

Dim myRange As Range 'myRange must be declared as Range 
'Ensure that "ThisWorkbook" is alright for you, meaning that you are running this code 
'from the Workbook containing the value you want at cell(25,10) 
Set myRange = ThisWorkbook.Worksheets(3).Cell(25, 10) '.Cell(25, 10) Or .Range("Y10") 
ActiveChart.SetSourceData Source:=Range(myRange.Address) 
'Or simply 
ActiveChart.SetSourceData Source:=myRange 
Смежные вопросы