Excel VBA:将新行数据添加到数据表时更新图表按钮

时间:2015-07-27 20:34:39

标签: excel vba excel-vba charts

我正在使用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"的变量。或者由于我缺乏编程经验,我可能会完全失败。感谢您的任何见解。

3 个答案:

答案 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"。