如何创建一个可以绘制变化范围的VBA宏?

时间:2010-06-24 15:35:05

标签: excel vba excel-vba

目前,我有一个表格会在将新数据添加到电子表格时自动更新。我能够轻松地创建一个宏来绘制一个设定的范围,但是如何让它自动更新范围,以便绘制所有正确的数据?我的目标是能够创建一个按钮,我可以随时按下该按钮,在该表上运行宏并绘制结果图。

现在,我的代码是:

Sub Macro1()
'
' Macro1 Macro
' Macro recorded 6/24/2010 by Nicole
'

''
    Range("R1:S12").Select
    Range("S12").Activate
    Charts.Add
    ActiveChart.ChartType = xlLineMarkers
    ActiveChart.SetSourceData Source:=Sheets("Intakes").Range("R1:S12"),PlotBy _
        :=xlColumns
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Intakes"
    With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "# Cases that day"
        .Axes(xlCategory, xlPrimary).HasTitle = False
        .Axes(xlValue, xlPrimary).HasTitle = False
    End With
End Sub

谢谢,

尼科尔

3 个答案:

答案 0 :(得分:2)

您需要做的所有事情(尽管它稍微取决于原始单元格如何更新其值)是将宏放入工作表更改事件,然后将目标与感兴趣的范围进行比较:

Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, Me.Range("R1:S12")) Is Nothing Then
    Range("R1:S12").Select
    Range("S12").Activate
    Charts.Add
    ActiveChart.ChartType = xlLineMarkers
    ActiveChart.SetSourceData Source:=Sheets("Intakes").Range("R1:S12"),PlotBy _
        :=xlColumns
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Intakes"
    With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "# Cases that day"
        .Axes(xlCategory, xlPrimary).HasTitle = False
        .Axes(xlValue, xlPrimary).HasTitle = False
    End With
End If  

End Sub

答案 1 :(得分:1)

仅供参考,为此找到了另一种解决方案......

我正在努力解决同样的问题:

我已经创建了一个动态名称来选择我想要的图形范围[整个范围],但在我将此名称插入图形范围后,它立即转换回静态范围[单元格引用],不再绘制我的图形动态范围名称。

我创建了一个宏:选择图形,更改数据选择,用我创建的动态名称覆盖静态单元格范围,输入。

我已将此宏指定给"更新图表"按钮,但注意到宏已将名称的范围视为静态,而非动态。

SO HERE'解决方案: 打开宏菜单,修改创建的宏... 在宏中,查找固定的单元格范围,用' sheetname'!dynamicname

覆盖它

完成。按钮现在应该使用动态范围数据更新图形。

希望这可以帮助那里的人。 欢呼声。

答案 2 :(得分:0)

一个相当简单的解决方案是使用位于公式输入部分右侧的输入框使该范围成为命名范围。这样,您可以通过名称Range(“MyOwnRange”)访问它,而不是将范围称为“R1:S12”。如果在命名范围内插入行或列,它将自动调整大小以包含新行。