Displaying Different Series
This example shows you how you can change the source data of a chart when you select different cells on a worksheet.
By selecting a row in the table you can quickly display the corresponding series of data on the chart.
We are going to use the Worksheet_SelectionChange event to be able to detect when a different cell is selected.
This chart will always display the data from the row of the active cell.
Things to Look Out For
If you select a range of cells that span multiple rows the first row in the selection will be used.
Worksheet_SelectionChange Event
Every time the user selects a cell on the worksheet this event is fired.
The Target argument contains the range object for the cell (or cells) that are currently selected.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rgeData As Range
If (ActiveCell.Column >= 2 And ActiveCell.Column <= 6) And _
(ActiveCell.Row >= 3 And ActiveCell.Row <= 9) Then
Set rgeData = Range(Cells(ActiveCell.Row, 3), Cells(ActiveCell.Row, 6))
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Values = rgeData
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).XValues = Range("C2:F2")
End If
End Sub
Line By Line
This event handler will be called when any cell (or range of cells) is selected.
The first thing we need to do is make sure that the active cell is in our table.
We can check this by checking the row and column numbers of the active cell.
If (ActiveCell.Column >= 2 And ActiveCell.Column <= 6) And _
(ActiveCell.Row >= 3 And ActiveCell.Row <= 9) Then
If the selected cell is not in our table then we don't need to do anything.
This line of code creates a range which corresponds to the row of data we want to display on our chart.
This basically defines the range to be the cells between "C" and "F" on the active row.
Set rgeData = Range(Cells(ActiveCell.Row, 3), Cells(ActiveCell.Row, 6))
This line of code defines the values for the chart to be the range we defined in the previous line.
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Values = rgeData
This line of code defines the chart labels on the X-axis to be the column headings of our table.
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).XValues = Range("C2:F2")
© 2024 Better Solutions Limited. All Rights Reserved. © 2024 Better Solutions Limited TopPrevNext