2016-01-08 2 views
1

Salut Je veux ajouter l'étiquette de données de personnaliser à mon diagramme de bulle. mon code est ci-dessous. à l'heure actuelle, l'étiquette de données se réfère à XValues. Je voudrais que mon étiquette de données se remplisse avec la taille de bulle. Auriez-vous l'esprit m'aider comment je peux personnaliser en dessous du code?comment ajouter l'étiquette de données au diagramme à bulles dans Excel

J'ai essayé d'ajouter .DataLabel.Text = "txt" mais je reçu ci-dessous erreur: Erreur d'exécution '438': Cet objet ne gère pas cette propriété ou méthode

Public Sub CreateMultiSeriesBubbleChart() 
If (Selection.Columns.Count <> 4 Or Selection.Rows.Count < 3) Then 
    MsgBox "Selection must have 4 columns and at least 2 rows" 
    Exit Sub 
End If 

Dim red, green, blue As Integer 


Dim bubbleChart As ChartObject 
Set bubbleChart = ActiveSheet.ChartObjects.Add(Left:=Selection.Left, Width:=600, Top:=Selection.Top, Height:=400) 
bubbleChart.Chart.ChartType = xlBubble 
Dim r As Integer 

For r = 2 To Selection.Rows.Count 
    With bubbleChart.Chart.SeriesCollection.NewSeries 
     .Name = "=" & Selection.Cells(r, 1).Address(External:=True) 
     .XValues = Selection.Cells(r, 2).Address(External:=True) 
     .Values = Selection.Cells(r, 3).Address(External:=True) 
     .BubbleSizes = Selection.Cells(r, 4).Address(External:=True) 
     .Format.Fill.Solid 
     .Format.Fill.ForeColor.RGB = RGB(61, 161, 161) 
    ' .DataLabel.Text = "txt" 
    End With 

Next 

bubbleChart.Chart.SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis) 
bubbleChart.Chart.Axes(xlCategory, xlPrimary).AxisTitle.Text = "=" & Selection.Cells(1, 2).Address(External:=True) 

bubbleChart.Chart.SetElement (msoElementPrimaryValueAxisTitleRotated) 
bubbleChart.Chart.Axes(xlValue, xlPrimary).AxisTitle.Text = "=" & Selection.Cells(1, 3).Address(External:=True) 

bubbleChart.Chart.SetElement (msoElementPrimaryCategoryGridLinesMajor) 
bubbleChart.Chart.Axes(xlCategory).MinimumScale = 0 

End Sub

Mon échantillon d'entrée:

Label   Hour Day count 
01-SUNDAY  14 1 1 
01-SUNDAY  19 1 1 
02-MONDAY  12 2 1 
02-MONDAY  13 2 1 
02-MONDAY  14 2 2 
02-MONDAY  16 2 2 
+1

Avez-vous vu cet article de Microsoft? https://support.microsoft.com/en-us/kb/914813 "Comment utiliser une macro VBA pour ajouter des étiquettes aux points de données dans un graphique XY (dispersion) ou dans un graphique à bulles dans Excel 2007" – Luuklag

+0

@luuklag: oui je l'ai fait, c'est pourquoi je veux vérifier comment ajouter .DataLabel.Text à mon code. Je suis débutant en VBA. – Amir

Répondre

2

DataLabel.Text est une méthode pour une Point, pas le NewSeries

Ce code:

For r = 2 To Selection.Rows.Count 
    With bubbleChart.Chart.SeriesCollection.NewSeries 
     [...] 
     .DataLabel.Text = "txt" 
    End With 
Next 

... tente d'étiqueter la série, et échoue.

Reconnaissant ce code comme étant d'un autre exemple célèbre de « graphiques à bulles multi-série », il est une hypothèse logique que nous ne devons gérer 1 point de données par série, ce qui rend le code suivant la solution:

For r = 2 To Selection.Rows.Count 
    With bubbleChart.Chart.SeriesCollection.NewSeries 
     [...] 
     .Points(1).HasDataLabel = True 
     .Points(1).DataLabel.Text = "txt" 
    End With 
Next 
0

Sans utiliser VBA, faites un clic droit sur les bulles et sélectionnez Ajouter des étiquettes de données. Ensuite, faites un clic droit sur les étiquettes de données et cliquez sur Mettre en forme les étiquettes de données. Sous Options d'étiquette, sélectionnez Valeur à partir des cellules et spécifiez les cellules contenant les étiquettes que vous souhaitez utiliser.

+0

Si le PO demande explicitement une solution de code VBA, pourquoi publiez-vous une réponse non-VBA? Il ne demande pas comment cela peut être fait, mais spécifiquement comment le faire avec VBA. –

+0

@CindyMeister Parce qu'ils peuvent vraisemblablement atteindre leur objectif sans utiliser VBA, puis procéder à l'ingénierie inverse en examinant le code. Si vous êtes d'accord, j'apprécierais un vote à la hausse. –