2016-07-14 70 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