可点击复选框的一个功能

时间:2014-10-30 03:45:09

标签: excel vba excel-vba

希望那里。

我想问一下这里的任何人的想法。

我在工作表中有很多复选框,我在同一工作表中链接了一个图表。我想创建一个函数,在单击时为每个复选框运行相同的代码(我有24个复选框)。如果您有任何想法或建议,请告诉我。

以下是我的代码流程的想法。我只有相同的代码流。

Private Sub CheckBox1_Click()
On Error Resume Next
    Sheets("REPORT").Activate
    ActiveSheets.ChartObjects("STOCK MOVEMENT GRAPH").Activate
On Error GoTo 0

If CheckBox1.Value = False Then
        ActiveChart.SeriesCollection(1).Delete

    Else
        ActiveChart.SeriesCollection.Add Source:=Sheets("REPORT").Range("B4:AB4")
End If
End Sub

Private Sub CheckBox2_Click()
On Error Resume Next
    Sheets("REPORT").Activate
    Worksheets("REPORT").ChartObjects("STOCK MOVEMENT GRAPH").Activate
On Error GoTo 0

If CheckBox2.Value = False Then
    ActiveChart.SeriesCollection(2).Delete

    Else
        ActiveChart.SeriesCollection.Add Source:=Sheets("REPORT").Range("B5:AB5"), PlotBy:=xlRows
End If
End Sub

提前致谢。问候。

1 个答案:

答案 0 :(得分:0)

您可以将公共代码拉出到一个独立的Sub:

Sub UpdateChart(rowNum As Long, AddingIt As Boolean)
    Dim cht As Chart, s As Series, rng As Range, f, i
    Set cht = Sheets("REPORT").ChartObjects("STOCK MOVEMENT GRAPH").Chart

    'what's the data range?
    Set rng = Sheets("REPORT").Range("B3").Offset(rowNum, 0).Resize(1, 2)

    If AddingIt Then
        'note: not checking if already added....
        cht.SeriesCollection.Add Source:=rng
    Else
        For i = cht.SeriesCollection.Count To 1 Step -1
            Set s = cht.SeriesCollection(i)
            f = s.Formula
            If InStr(f, rng.Address()) > 0 Then s.Delete
        Next i
    End If
End Sub

然后您的复选框代码缩小为:

Private Sub CheckBox1_Click()
    UpdateChart 1, CheckBox1.Value
End Sub

Private Sub CheckBox2_Click()
    UpdateChart 2, CheckBox2.Value
End Sub

'etc....