Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Like I mentioned in my comment (<em>And I could be wrong</em>) there is no shape property available for the <code>DataLabel</code> which will let you change the <code>.ShapeStyle</code>. However I managed to achieve what you want using a complex routine.</p> <p><strong>LOGIC</strong></p> <ol> <li>Insert a temporary shape, say a rectangle in the worksheet</li> <li>Apply the <code>.ShapeStyle</code> to this shape</li> <li>Individually set the properties of <code>DataLabel</code> like <em>Fill</em>, <em>Border color</em>, <em>Border Style</em>, <em>Shadow</em> etc with that from the shape.</li> <li>Once done, delete the shape.</li> </ol> <p><strong>CODE</strong></p> <pre><code>Sub Sample() Dim myChart As ChartObject Dim chrt As Chart Dim shp As Shape Dim sr As Series Set myChart = ActiveSheet.ChartObjects("Chart 1") Set chrt = myChart.Chart 'º·. Add a temporary Shape with desired ShapeStyle Set shp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 100, 100, 100, 100) shp.ShapeStyle = msoShapeStylePreset42 Set sr = chrt.SeriesCollection(1) 'º·. Fill Dim gs As GradientStop Dim i As Integer If shp.Fill.BackColor.ObjectThemeColor &lt;&gt; msoNotThemeColor Then sr.Format.Fill.BackColor.ObjectThemeColor = shp.Fill.BackColor.ObjectThemeColor End If If shp.Fill.ForeColor.ObjectThemeColor &lt;&gt; msoNotThemeColor Then sr.Format.Fill.ForeColor.ObjectThemeColor = shp.Fill.ForeColor.ObjectThemeColor End If Select Case shp.Fill.Type Case msoFillGradient ' Have to set the gradient first otherwise might not be able to set gradientangle sr.Fill.TwoColorGradient shp.Fill.GradientStyle, shp.Fill.GradientVariant sr.Format.Fill.GradientAngle = shp.Fill.GradientAngle 'Removes pre-existing gradient stops as far as possible... Do While (sr.Format.Fill.GradientStops.Count &gt; 2) sr.Format.Fill.GradientStops.Delete sr.Format.Fill.GradientStops.Count Loop For i = 1 To shp.Fill.GradientStops.Count Set gs = shp.Fill.GradientStops(i) If i &lt; 3 Then sr.Format.Fill.GradientStops.Insert gs.Color, gs.Position, gs.Transparency, i ' ...and then removes last two stops that couldn't be removed earlier sr.Format.Fill.GradientStops.Delete 3 Else sr.Format.Fill.GradientStops.Insert gs.Color, gs.Position, gs.Transparency, i End If Next i Case msoFillSolid sr.Format.Fill.Solid ' NYI Case msoFillBackground Case msoFillMixed Case msoFillPatterned Case msoFillPicture Case msoFillTextured End Select sr.Format.Fill.Transparency = shp.Fill.Transparency 'º·. Line If shp.Line.Visible Then sr.Format.Line.ForeColor = shp.Line.ForeColor sr.Format.Line.BackColor = shp.Line.BackColor sr.Format.Line.DashStyle = shp.Line.DashStyle sr.Format.Line.InsetPen = shp.Line.InsetPen sr.Format.Line.Style = shp.Line.Style sr.Format.Line.Transparency = shp.Line.Transparency sr.Format.Line.Weight = shp.Line.Weight ' Some formatting e.g. arrowheads not supported End If sr.Format.Line.Visible = shp.Line.Visible 'º·. Glow If shp.Glow.Radius &gt; 0 Then sr.Format.Glow.Color = shp.Glow.Color sr.Format.Glow.Radius = shp.Glow.Radius sr.Format.Glow.Transparency = shp.Glow.Transparency End If sr.Format.Glow.Radius = shp.Glow.Radius 'º·. Shadows are a pain ' see http://stackoverflow.com/questions/10178990/turn-off-marker-shadow-on-vba-generated-excel-plots If shp.Shadow.Visible Then sr.Format.Shadow.Blur = shp.Shadow.Blur sr.Format.Shadow.ForeColor = shp.Shadow.ForeColor sr.Format.Shadow.OffsetX = shp.Shadow.OffsetX sr.Format.Shadow.OffsetY = shp.Shadow.OffsetY sr.Format.Shadow.Size = shp.Shadow.Size sr.Format.Shadow.Style = shp.Shadow.Style sr.Format.Shadow.Transparency = shp.Shadow.Transparency sr.Format.Shadow.Visible = msoTrue Else ' Note that this doesn't work as expected... sr.Format.Shadow.Visible = msoFalse ' ...but this kind-of does sr.Format.Shadow.Transparency = 1 End If 'º·. SoftEdge sr.Format.SoftEdge.Radius = shp.SoftEdge.Radius sr.Format.SoftEdge.Type = shp.SoftEdge.Type 'º·. 3d Effects If shp.ThreeD.Visible Then sr.Format.ThreeD.BevelBottomDepth = shp.ThreeD.BevelBottomDepth sr.Format.ThreeD.BevelBottomInset = shp.ThreeD.BevelBottomInset sr.Format.ThreeD.BevelBottomType = shp.ThreeD.BevelBottomType sr.Format.ThreeD.BevelTopDepth = shp.ThreeD.BevelTopDepth sr.Format.ThreeD.BevelTopInset = shp.ThreeD.BevelTopInset sr.Format.ThreeD.BevelTopType = shp.ThreeD.BevelTopType sr.Format.ThreeD.ContourColor = shp.ThreeD.ContourColor sr.Format.ThreeD.ContourWidth = shp.ThreeD.ContourWidth sr.Format.ThreeD.Depth = shp.ThreeD.Depth sr.Format.ThreeD.ExtrusionColor = shp.ThreeD.ExtrusionColor sr.Format.ThreeD.ExtrusionColorType = shp.ThreeD.ExtrusionColorType sr.Format.ThreeD.FieldOfView = shp.ThreeD.FieldOfView sr.Format.ThreeD.LightAngle = shp.ThreeD.LightAngle sr.Format.ThreeD.Perspective = shp.ThreeD.Perspective sr.Format.ThreeD.ProjectText = shp.ThreeD.ProjectText sr.Format.ThreeD.RotationX = shp.ThreeD.RotationX sr.Format.ThreeD.RotationY = shp.ThreeD.RotationY sr.Format.ThreeD.RotationZ = shp.ThreeD.RotationZ sr.Format.ThreeD.Z = shp.ThreeD.Z End If sr.Format.ThreeD.Visible = shp.ThreeD.Visible 'º·. Cleanup shp.Delete End Sub </code></pre> <p><strong>SCREENSHOT</strong></p> <p>Just Setting some of the <code>.Fill</code> properties gives me this for <code>msoShapeStylePreset38</code></p> <p><img src="https://i.stack.imgur.com/8QqYt.png" alt="enter image description here"></p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload