Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen

Bubble Chart Labels. | Herbers Excel-Forum


Betrifft: Bubble Chart Labels. von: Nolte
Geschrieben am: 06.08.2012 15:44:25

Guten Tag,

Vielleicht kann man mir hier weiterhelfen. Es geht um das Beschriften von Bubble Charts. Der VBA von Mircosoft hilft mir leider nicht weiter, denn ich hab ca. 30 Bubbels, die teils dicht bei einander liegen. Daher war meine Lösung bisher immer die Labels im Kreis im das Chart herum anzuordnen und dann mit Pfeilen auf die Bubbles zeigen.

Das Problem ist, dass beim Updaten die Labels und die Pfeile nicht mitwandern und ich alles in Handarbeit wieder hin und eher ziehen muss.

Gibt es da eine Möglichkeit wie ich mir diesen Vorgang erleichtern kann?

Gruß und danke für die Hilfe im vorraus.
Ferry

  

Betrifft: AW: Bubble Chart Labels. von: Beverly
Geschrieben am: 06.08.2012 16:08:57

Hi Ferry,

dazu müsste man mal dein Diagramm sehen, um entscheiden zu können, ob sich da per VBA etwas machen lässt - standardmäßig ist das bekanntlich nicht möglich.


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Bubble Chart Labels. von: Nolte
Geschrieben am: 07.08.2012 13:07:31

Hallo Karin,

anbei ein Screen shoot:


Ich habe ca. 24 solcher Diagramme, mit volkwirtschaftlichen Daten und 3 Szenarien. Macht also 72 Stück. Das alles per hand zu justieren ist echt zeitraubend.

Meine VBA Kenntnisse sind leider noch sehr rudimentär.

Danke für die Unterstützung!


  

Betrifft: AW: Bubble Chart Labels. von: Nolte
Geschrieben am: 07.08.2012 13:16:33

Hallo Karin,

anbei ein Screen shoot:


Ich habe ca. 24 solcher Diagramme, mit volkwirtschaftlichen Daten und 3 Szenarien. Macht also 72 Stück. Das alles per hand zu justieren ist echt zeitraubend.

Meine VBA Kenntnisse sind leider noch sehr rudimentär.

Danke für die Unterstützung!


  

Betrifft: AW: Bubble Chart Labels. von: Beverly
Geschrieben am: 09.08.2012 18:44:05

Hi Ferii,

ich habe leider nur eine Teillösung - wenn du die Beschriftungslabel von Hand positionierst, könntest du per Code die Linien postionieren lassen. Es ist jetzt nur die Frage, ob dir das weiterhilft. In dem Fall wäre wichtig zu wissen, wie viele Dateneihen du im Diagrmam hast - eine oder mehrere? Es wäre auch so, dass keine Pfeile erstellt sondenr nur eine Art Führungslinien vom Beschriftungslabel zum Zentrum der Blase.


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Bubble Chart Labels. von: Nolte
Geschrieben am: 10.08.2012 08:21:38

Das wäre ein Traum, da mir das einen Arbeitsschritt sparen würde! Ich muss ja bisher beides per Hand positionieren und die Pfeile machen eigentlich die meiste arbeit.

Gruß und Dank
Ferry


  

Betrifft: AW: Bubble Chart Labels. von: Nolte
Geschrieben am: 10.08.2012 09:01:13

Sorry, wer lesen kann ist klar im Vorteil.

Sind mehere Datenreihen, da ich nur die Ländersummen im Diagramm auswerte. Die Daten aber aufgrund der Vollständigkeit auf Regions Basis habe.

Gruß und Dank die Zweite.
Ferry


  

Betrifft: AW: Bubble Chart Labels. von: Beverly
Geschrieben am: 10.08.2012 11:01:44

Hi Ferri,

versuche mal diesen Code:

Sub LinienPositionieren()
   Dim intPunkt As Integer
   Dim intReihe As Integer
   Dim chrDia As Chart
   Dim dblWinkel As Double
   Dim dblXLabel As Double
   Dim dblXPunkt As Double
   Dim dblYLabel As Double
   Dim dblYPunkt As Double
   Dim shaLinie As Shape
   Set chrDia = ActiveSheet.ChartObjects(1).Chart
   With chrDia
      For intPunkt = .Shapes.Count To 1 Step -1
         .Shapes(intPunkt).Delete
      Next intPunkt
      For intReihe = 1 To .SeriesCollection.Count
         For intPunkt = 1 To .SeriesCollection(intReihe).Points.Count
            With .SeriesCollection(intReihe)
               dblXLabel = .Points(intPunkt).DataLabel.Left + _
                  .Points(intPunkt).DataLabel.Width / 2
               dblXPunkt = .Points(intPunkt).Left + .Points(intPunkt).Width / 2
               dblYLabel = .Points(intPunkt).DataLabel.Top + _
                  .Points(intPunkt).DataLabel.Height / 2
               dblYPunkt = .Points(intPunkt).Top + .Points(intPunkt).Width / 2
               ' Label liegt oberhalb
               If dblYLabel <= dblYPunkt Then
                  If dblXLabel <= dblXPunkt Then
                     ' Label liegt links oben
                     Set shaLinie = .Parent.Parent.Shapes.AddLine(dblXLabel, _
                        dblYLabel, dblXPunkt, dblYPunkt)
                     With shaLinie.Line
                        .Visible = msoTrue
                        .ForeColor.RGB = RGB(192, 0, 0)
                        .Transparency = 0
                     End With
                  Else
                     ' Label liegt rechts oben
                     Set shaLinie = .Parent.Parent.Shapes.AddLine(dblXLabel, _
                        dblYLabel, dblXPunkt, dblYPunkt)
                     With shaLinie.Line
                        .Visible = msoTrue
                        .ForeColor.RGB = RGB(192, 0, 0)
                        .Transparency = 0
                     End With
                  End If
               ' Label liegt unterhalb
               Else
                  If dblXLabel <= dblXPunkt Then
                     ' Label liegt links unten
                     Set shaLinie = .Parent.Parent.Shapes.AddLine(dblXLabel, _
                        dblYLabel, dblXPunkt, dblYPunkt)
                     With shaLinie.Line
                        .Visible = msoTrue
                        .ForeColor.RGB = RGB(192, 0, 0)
                        .Transparency = 0
                     End With
                  Else
                     ' Label liegt rechts unten
                     Set shaLinie = .Parent.Parent.Shapes.AddLine(dblXLabel, _
                        dblYLabel, dblXPunkt, dblYPunkt)
                     With shaLinie.Line
                        .Visible = msoTrue
                        .ForeColor.RGB = RGB(192, 0, 0)
                        .Transparency = 0
                     End With
                  End If
               End If
            End With
         Next intPunkt
      Next intReihe
   End With
End Sub

Ich bin davon ausgegangen, dass es sich um ein in ein Tabellenblatt eingebettetes Diagrammobjekt handelt und dass sich nur 1 Diagrammobjekt im Tabellenblatt befindet. Falls einer oder alle diese Bedingungen nicht zutreffen, sag Bescheid, dann passe ich den Code an.


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Bubble Chart Labels. von: Nolte
Geschrieben am: 10.08.2012 12:29:22

Hi Karin,

Erst einmal vielen Dank für die Mühe!

Ich bekomme leider die Fehler Meldung: Dieses Objekt untersützt diese Eigenschaft oder Methode nicht.

Die Datenreihen befinden sich in einem Extra Tabellenblatt. Die Bubble Charts befinden sich dann jeweils auf einem anderen Tabellenblatt.

Gruß
Ferry


  

Betrifft: AW: Bubble Chart Labels. von: Beverly
Geschrieben am: 10.08.2012 12:52:28

Hi Ferri,

an welcher Stelle im Code kommt der Fehler?

Vielleicht kannst du ja auch mal deiner Mappe hochladen, damit man das besser nachvollziehen kann.


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Bubble Chart Labels. von: Nolte
Geschrieben am: 10.08.2012 13:33:28

Also ich hab mal nen Testfile gemacht und nen screenshot:



https://www.herber.de/bbs/user/81364.xlsm

Wirklichen vielen Dank für die Mühe


  

Betrifft: AW: Bubble Chart Labels. von: Nolte
Geschrieben am: 10.08.2012 13:39:50

Also ich hab mal nen Testfile gemacht und nen screenshot:



https://www.herber.de/bbs/user/81364.xlsm

Wirklichen vielen Dank für die Mühe


  

Betrifft: AW: Bubble Chart Labels. von: Beverly
Geschrieben am: 10.08.2012 16:20:28

Hi Ferri,

den Code habe ich mit Excel2010 erstellt und dort läuft er fehlerfrei durch. Jetzt habe ich ihn mal mit Excel2007 testen lassen mit dem Ergebnis: es gibt die Eigenschaft Width für die Breite des Beschriftungslabels nicht und auch nicht Left und Width für den Datenpunkt. Diese werden jedoch benötigt um die Länge und die Position der eingefügten Linien zu ermitteln, was in Excel2010 ja auch funktioniert. Tut mir wirklich Leid, aber ich habe da keine Lösung.


GrußformelBeverly's Excel - Inn