2016-07-14 2 views
0
Private Sub CommandButton2_Click() 

Dim objSelection1 As Range, objSelection2 As Range, objChart As ChartObject 

ActiveWorkbook.Sheets("Sheet1").Select 

Set objSelection1 = _ 
    Application.InputBox(Prompt:="Select first series", _ 
    Default:=Selection.Address, _ 
    Type:=8) 
Set objSelection2 = _ 
    Application.InputBox(Prompt:="Select second series", _ 
    Type:=8) 

' This part is wrong 
Dim objSelection3 As Range 
Set objSelection3 = Range("=Sheet1!$I$56:$N$56") 
objSelection3.FormulaArray = "=objSelection1 - objSelection2" 

Set objChart = ChartObjects.Add(Left:=400, Width:=200 * 1.618, Top:=570, Height:=200) 
With objChart.Chart 
    .ChartType = xlLineMarkers 
    .SetSourceData objSelection3 
    .PlotBy = xlRows 
    End With 
End With 

End Sub 

Я пытаюсь написать код, который подскажет пользователю о двух сериях данных и диаграммах новую серию, заданную суммой двух введенных серий. У меня возникли проблемы с созданием этой новой серии в моей функции. Я попробовал сложение матрицы (что не похоже на удобную функцию) и formulaArray (который, как представляется, не принимает переменные объекта Range). Если возможно, я также хотел бы не выводить вновь созданную серию на листе и просто иметь ее в формуле как внутреннюю переменную. Я избегал использования каких-либо циклов, потому что считаю, что есть очень чистый способ написать это. Любая помощь приветствуется.VBA: Добавление двух объектов диапазона покомпонентно

ответ

0

Это будет сделано, но диапазоны должны быть одинакового размера.

Private Sub CommandButton2_Click() 

Dim objSelection1 As Range, objSelection2 As Range, objChart As ChartObject 

With ActiveWorkbook.Sheets("Sheet1") 

    Set objSelection1 = _ 
     Application.InputBox(Prompt:="Select first series", _ 
     Default:=Selection.Address, _ 
     Type:=8) 
    Set objSelection2 = _ 
     Application.InputBox(Prompt:="Select second series", _ 
     Type:=8) 

    ' This part is wrong 
    Dim objSelection3 As Range 
    Set objSelection3 = .Range("I56:N56") 
    objSelection3.Value = .Evaluate(objSelection1.Address & "-" & objSelection2.Address) 
End With 

Set objChart = ChartObjects.Add(Left:=400, Width:=200 * 1.618, Top:=570, Height:=200) 
With objChart.Chart 
    .ChartType = xlLineMarkers 
    .SetSourceData objSelection3 
    .PlotBy = xlRows 
    End With 
End With 

End Sub 
+0

Хорошее решение, хотя я нашел другой способ сделать это без ссылки на неиспользуемую ячейку (в objSelection3), используя вместо этого массивы. Очень признателен! – rocketman

Смежные вопросы