2012-03-14 89 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