如何创建一个VBA宏来绘制一个变化的范围?
目前,我有一个表格,它会在新数据添加到电子表格时自动更新。我能够轻松创建一个将绘制设定范围的宏,但是如何获取它以自动更新范围以便绘制所有正确的数据?我的目标是能够创建一个按钮,我可以随时按下该按钮,在此表上运行宏并绘制结果图。如何创建一个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
感谢,
妮可
一个相当简单的解决方案是让该范围内的命名范围,使用位于输入框公式输入部分的权利。这样,您不必将范围称为“R1:S12”,您可以通过名称Range(“MyOwnRange”)访问它。如果您在命名范围内插入行或列,它将自动调整大小以包含新行。
这不起作用,因为行会自动添加到范围的末尾,所以此行不包含在“MyOwnRange”中。我基本上有两列填充1000个连续单元的代码。如果还没有填充数据的单元格,单元格显示为空白(这里我按日期排列,所以单元格将显示为空白,直到达到该日期)。基本上,我希望它包含所有包含文本(而不是代码)的单元格,在命名范围时不起作用。 – Nicole 2010-06-24 18:08:49
@Nicole看起来像在这个线程http://www.mrexcel.com/archive/Chart/1911.html中讨论的那个相同的问题。线程结束时的解决方案。 – 2010-06-26 04:15:24
工作,谢谢! – Nicole 2010-06-29 16:43:03
所有你需要做的不同(尽管它稍微依赖于原始细胞如何得到它的值更新)是把你的宏在工作表更改事件,则目标比较利益的范围:
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
仅供参考,发现这另一种解决办法...
我用同样的问题所困扰:
我已经创建了一个选择我想要的图形范围内的整个范围]一个动态的名字,但经过我把这个名字插入gr aph范围内,它立即转换回静态范围[单元格引用],不再绘制我的动态范围名称。
我创建了一个宏:选择图形,更改数据选择,用我创建的动态名称覆盖静态单元格范围,输入。
我将此宏指定给“更新图表”按钮,但注意到宏名称的范围是静态的,而不是动态的。
所以这里的解决方案: 打开宏菜单,修改创建的宏... 宏,寻找固定的单元格范围,以“SHEETNAME”覆盖它dynamicname
完成!按钮现在应该使用动态范围数据更新图形。
希望这可以帮助那里的人。 欢呼声。
解释您在“将新数据添加到电子表格时会自动更新的表”的含义。到底什么是你的'桌子'?你不能触发它吗? – 2010-06-24 23:58:41
基本上,单元格中的代码是= IF(ISBLANK(OFFSET($ A $ 2,SUM($ S $ 2:$ S12),0))= TRUE,“”,OFFSET($ A $ 2,SUM($ S $ 2 :$ S12),0)) 因此,当单元格从空白切换到具有数据时,我想将其添加到应绘制的范围。 – Nicole 2010-06-25 13:34:42
Nicole在回复评论时,在前面添加一个&符号会向您回复的用户发送通知,如@Lance。我会看看这个问题。 – 2010-07-01 15:45:02