我正在尝试创建一个宏,将散点图上的数据标签更改为每个点的标题。例如:
Example chart http://www.wiseowl.co.uk/blog/s130/i2.gif
在这种情况下,我希望数据标签显示电影标题。我使用的代码来自this website,但我的散点图有两个系列的数据。我想使用动态命名范围来告诉宏名称所在的单元格的范围,在我的代码中,动态命名范围是FONames& BONames。这是我的代码:
Sub CreateDataLabels()
'holds the entire film data series in the chart
Dim FilmDataSeries As Series
Dim FilmDataSeries2 As Series
'holds one cell at a time
Dim SingleCell As Range
'holds the full list of cells containing film names
Dim FilmList As Range
Dim FilmList2 As Range
'keeps track of which datapoint we're labelling
Dim FilmCounter As Integer
Dim FilmCounter2 As Integer
'The sheet in which the graph is on
Dim ws As Worksheet
Set ws = Worksheets("Datos Gráfico")
'set the counter to start at 1
FilmCounter = 1
FilmCounter2 = 1
'set a reference to the cells containing the list of films
Set FilmList = Range("FONames")
Set FilmList2 = Range("BONames")
'set a reference to the chart data series
Set FilmDataSeries = ws.ChartObjects(1).Chart.SeriesCollection(1)
Set FilmDataSeries2 = ws.ChartObjects(1).Chart.SeriesCollection(2)
'make sure data labels are turned on
FilmDataSeries.HasDataLabels = True
FilmDataSeries2.HasDataLabels = True
'loop over the cells in the list of films
For Each SingleCell In FilmList
FilmDataSeries.Points(FilmCounter).DataLabel.Text = SingleCell.Value
FilmCounter = FilmCounter + 1
Next SingleCell
For Each SingleCell In FilmList2
FilmDataSeries2.Points(FilmCounter2).DataLabel.Text = SingleCell.Value
FilmCounter2 = FilmCounter2 + 1
Next SingleCell
End Sub
我收到1004错误,说明指定的尺寸无效。当我用实际的单元格范围替换FONames或BONames时,例如。范围(“A5”,“A11”),一切都很完美。如何在代码中使用这些动态命名范围?
答案 0 :(得分:0)
动态命名范围的定义是什么?我为列A定义了一个命名范围,如下所示:
=OFFSET(Sheet1!$A$1,1,0,COUNTA(Sheet1!$A:$A)-1,1)
它运作得很好。
答案 1 :(得分:0)
例如:
'---------------------------------------------------------------------------
' In order to add label at scatter graph. You must selected a graph before.
' @param void
'---------------------------------------------------------------------------
Sub add_label_on_graph()
Dim Counter As Integer
Dim xVals As String
Dim reponse As Integer
If ActiveChart Is Nothing Then
reponse = MsgBox("Attention, vous devez au préalable sélectionner un graphique avant de lancer cette commande.", vbExclamation, "Information")
Exit Sub
End If
Application.ScreenUpdating = False
' Récupération de la range des données que l'on stocke dans la variable xVals.
xVals = ActiveChart.SeriesCollection(1).Formula
xVals = Mid(xVals, InStr(InStr(xVals, ","), xVals, Mid(Left(xVals, InStr(xVals, "!") - 1), 9)))
xVals = Left(xVals, InStr(InStr(xVals, "!"), xVals, ",") - 1)
Do While Left(xVals, 1) = ","
xVals = Mid(xVals, 2)
Loop
' Ajoute un label à chaque point du graphique
For Counter = 1 To Range(xVals).Cells.Count
ActiveChart.SeriesCollection(1).Points(Counter).HasDataLabel = True
ActiveChart.SeriesCollection(1).Points(Counter).DataLabel.text = Range(xVals).Cells(Counter, 1).Offset(0, -1).Value
Next Counter
Application.ScreenUpdating = True
End Sub