2012-03-14 91 views
1
Sub StoragevsQuota() 
    Charts.Add 
    ActiveChart.ChartType = xlColumnClustered 
    ActiveChart.SetSourceData Source:=Sheets("Data").Range("E1:G32") 
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Storage Charts" 
    ActiveChart.Parent.Name = "Used Space vs Disk Quota" 
    ActiveChart.SetElement (msoElementChartTitleCenteredOverlay) 
    ActiveChart.ChartTitle.Text = "Used Space vs Disk Quota" 
End Sub 

在excel vba中這將產生一個圖表,我在點擊一個按鈕從E1:G32範圍內的按鈕。但是,這是一個靜態的範圍Excel vba繪製,編輯範圍

我想大致保持相同的語法,但它通過E列循環例如一路下跌,直到沒有更多的數據,因此這將是32,則擴展該範圍G32

它的列的長度可以變化的圖表,我會產生不是多少列,任何人都可以幫助我設置它,以便像我上面說的那樣讀取一列,直到沒有數據輸入,然後擴大上述情況下的範圍橫跨3列?

感謝ž

延續

Sub WeeklySuccessOrFailure() 
'On Error Resume Next 
Dim lastRow As Long 
With Sheets("Data") 
lastRow = .range("AA" & Rows.Count).End(xlUp).Row 
Charts.Add 
ActiveChart.SetSourceData Source:=Sheets("Data").range("AA1:AA & lastRow, AD1:&  lastRow, AE1:AE & lastRow") 
ActiveChart.ChartType = xlColumnClustered 
ActiveChart.Location Where:=xlLocationAsObject, Name:="Job Charts" 
ActiveChart.Parent.Name = "Total Weekly Success or Failure" 
ActiveChart.SetElement (msoElementChartTitleCenteredOverlay) 
ActiveChart.ChartTitle.Text = "Total Weekly Success Or Failure Of Jobs" 
End With 
End Sub 

回答

2

這就是你正在嘗試? (UNTESTED

Sub StoragevsQuota() 
    Dim lastRow As Long 

    With Sheets("Data") 
     lastRow = .Range("G" & Rows.Count).End(xlup).Row 

     Charts.Add 
     ActiveChart.ChartType = xlColumnClustered 
     ActiveChart.SetSourceData Source:=.Range("E1:G" & lastRow) 
     ActiveChart.Location Where:=xlLocationAsObject, Name:="Storage Charts" 
     ActiveChart.Parent.Name = "Used Space vs Disk Quota" 
     ActiveChart.SetElement (msoElementChartTitleCenteredOverlay) 
     ActiveChart.ChartTitle.Text = "Used Space vs Disk Quota" 
    End With 
End Sub 

隨訪

@siddarth只是抓住你的注意力任何機會,你可以幫我出我在評論下面貼了一個問題,boschiero評論,謝謝 - Zenaphor 8秒前

這是你正在嘗試的嗎? (AGAIN UNTESTED

ActiveChart.SetSourceData Source:=Sheets("Data").Range("AA1:AA" & lastRow & _ 
",AD1:AD" & lastRow & ",AE1:AE" & lastRow) 
+0

優秀的工作很好,非常感謝 – Zenaphor 2012-03-14 14:28:26

+0

@siddarth只是爲了抓住你的注意力任何機會,你可以幫我解決一個問題,我發表下評論下面哪裏boschiero評論,謝謝 – Zenaphor 2012-03-15 11:19:01

+0

@Zenaphor:更新我的帖子上面。 – 2012-03-15 11:23:32

1

我個人更喜歡我區間的起點和終點細胞是動態的,所以我的代碼將是這樣的:

ActiveChart.SetSourceData Source:=.Range(.cells(1,5),.cells(7,lastRow)) 

但真的只是因爲我喜歡用於指定範圍的單元格符號。 Siddharth的回答非常重要。

對於多個非連續範圍,我會創建一個Range變量,然後使用Union將任意範圍分配給它。

所以我們可以說我想列AA,AD和AE,作爲亞洲時報Siddharth的榜樣,我會做到以下幾點:

Sub WeeklySuccessOrFailure() 
'On Error Resume Next 
Dim lastRow As Long 
Dim myRange as Range 
With Sheets("Data") 
lastRow = .range("AA" & Rows.Count).End(xlUp).Row 
Charts.Add 
Set myRange = Union(.range(.cells(1,27),cells(lastRow,27)),_ 
.range(.cells(1,30),.cells(lastRow,30)),_ 
.range(.cells(1,31),.cells(lastRow,31))) 
ActiveChart.SetSourceData Source:= myRange 
ActiveChart.ChartType = xlColumnClustered 
ActiveChart.Location Where:=xlLocationAsObject, Name:="Job Charts" 
ActiveChart.Parent.Name = "Total Weekly Success or Failure" 
ActiveChart.SetElement (msoElementChartTitleCenteredOverlay) 
ActiveChart.ChartTitle.Text = "Total Weekly Success Or Failure Of Jobs" 
End With 
End Sub 

我沒有測試上面的代碼,但我已經使用了myRange和聯盟方法。

我會說它比Siddharth的建議稍微笨拙,但我覺得它更容易用於自動化目的。如果你不打算自動化你的宏的那部分查找列的圖形,即它總是會是相同的列,那麼Siddharth的方法更容易,可能更直觀。

+0

@ j boschiero/siddarth我使用上面提到的方法,它的工作也很好,但我有一個問題,如果我需要選擇.range,而不是它是從像a1:d6我怎麼能說a1:最後一行,c1:c最後一行,d1:d最後一行例如?我嘗試過的一些例子,它不起作用,在我原來的問題中已經加上了 – Zenaphor 2012-03-15 11:16:04

0

如果數據是一個很好的矩形,並且被空白的行和列所包圍,那麼可以非常容易。選擇在數據範圍內的小區,則運行該代碼,這將查找包含活動單元格的數據的整個區域:

Sub MakeChartFromIndicatedRange1() 
    Dim rng As Range 
    Set rng = ActiveCell.CurrentRegion 
    Charts.Add 
    ActiveChart.SetSourceData Source:=rng 
    ' etc. 
End Sub 

,或者如果用戶將要選擇的整個範圍內,該代碼使用所選擇的區域:

Sub MakeChartFromIndicatedRange2() 
    Dim rng As Range 
    Set rng = Selection 
    Charts.Add 
    ActiveChart.SetSourceData Source:=rng 
    ' etc. 
End Sub 

或完全模仿Excel的內置範圍定義者,它使用了選擇的範圍,如果它是一個以上的小區,或整個區域的活動單元格包含如果只選擇了一個單元格:

Sub MakeChartFromIndicatedRange() 
    Dim rng As Range 
    If Selection.Cells.Count = 1 Then 
    Set rng = ActiveCell.CurrentRegion 
    Else 
    Set rng = Selection 
    End If 
    Charts.Add 
    ActiveChart.SetSourceData Source:=rng 
    ' etc. 
End Sub