我正在使用Excel VBA宏来创建项目列表的时间轴。我希望宏是动态的,并有一个更新命令按钮,当新信息添加到数据表时,它将刷新图表。
但是,无论何时我向数据表添加新行,图表格式都会变得混乱。这是我的代码:
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
On Error Resume Next
ThisWorkbook.Charts.Delete
On Error GoTo 0
Dim ChartSheet1 As Chart
Set ChartSheet1 = Charts.Add
With ChartSheet1
.SetSourceData Source:=Sheets("Sheet1").Range("A2:A61,F2:F61,I2:I61")
.ChartType = xlBarStacked
End With
Application.ScreenUpdating = True
End Sub
" ThisWorkbook.Charts.Delete"是删除现有图表并将其替换为新的更新图表。
A列包含项目标题。列F包含项目开始的日期。第I列包含项目将持续的天数。
我的数据表中有59行数据。我将范围设为61,以便我可以添加另一行或两行数据,以查看我的代码是否有效。但它并没有。我使用记录宏函数来创建我的大部分代码。我知道这不是最好的技术,但我没有VBA的背景,正在寻找快速的解决方案。我一直在努力学习基础知识,但无法找到解决我遇到问题的方法。
我认为问题出在" 61"并且我应该将其更改为类似" lastRow"的变量。或者由于我缺乏编程经验,我可能会完全失败。感谢您的任何见解。
答案 0 :(得分:0)
您可以通过计算VBA中数据的最后一行来使数据源动态化,如下所示:
Private Sub CommandButton1_Click()
' declare variables for last row and worksheet
Dim lastRow
Dim sh As Worksheet
Set sh = ActiveWorkbook.Worksheets("Sheet1")
' get last populated cell in column A
lastRow = sh.Cells(Rows.Count, "A").End(xlUp).Row
Application.ScreenUpdating = False
On Error Resume Next
ThisWorkbook.Charts.Delete
On Error GoTo 0
Dim ChartSheet1 As Chart
Set ChartSheet1 = Charts.Add
With ChartSheet1
.SetSourceData Source:=Sheets("Sheet1").Range("A2:A" & lastRow & ",F2:F" & lastRow & ",I2:I" & lastRow)
.ChartType = xlBarStacked
End With
Application.ScreenUpdating = True
End Sub
您的代码会完全删除图表工作表,然后创建一个新图表。我不确定“图表格式变得乱七八糟”在您的世界中意味着什么,但没有任何格式化,您将获得带有该代码的Excel默认水平条形图。
答案 1 :(得分:0)
将工作表中的数据转换为表格(“插入”选项卡>表格)。使用此表制作图表。
现在,只要在表中添加或删除行,图表就会自动更新以反映表的当前内容。
不需要VBA,不需要删除并重新创建图表,然后丢失然后尝试恢复其格式。
答案 2 :(得分:0)
看看数字。范围从第2行到第61行,其中包含59行数据。如果您想再添加2行数据,则需要将其更改为" 63"。