2009-12-17 6 views
0
Dim cht As Chart 
Dim Xleft As Double, Ytop As Double 
Xleft = cht.PlotArea.InsideLeft 

Je reçois cette erreur sur la troisième ligne. Quelqu'un sait-il pourquoi?excel: variable d'objet ou avec une variable de bloc non définie

Voici le code complet. S'il vous plaît garder à l'esprit que c'est Excel 2003

Sub DrawSmoothTransparentShapesOnRadarChart() 
     Dim cht As Chart 
     Set cht = Worksheets(1).ChartObjects(1) 

     Dim srs As Series 
     Dim iSrs As Long 
     Dim Npts As Integer, Ipts As Integer 
     Dim myShape As Shape 
     Dim Xnode As Double, Ynode As Double 
     Dim Rmax As Double, Rmin As Double 
     Dim Xleft As Double, Ytop As Double 
     Dim Xwidth As Double, Yheight As Double 
     Dim dPI As Double 
     Dim iFillColor As Long 
     Dim iLineColor As Long 

     Set cht = ActiveChart 
     Xleft = cht.PlotArea.InsideLeft 
     Xwidth = cht.PlotArea.InsideWidth 
     Ytop = cht.PlotArea.InsideTop 
     Yheight = cht.PlotArea.InsideHeight 
     Rmax = cht.Axes(2).MaximumScale 
     Rmin = cht.Axes(2).MinimumScale 
     dPI = WorksheetFunction.Pi() 

     For iSrs = 1 To cht.SeriesCollection.Count 

     Set srs = cht.SeriesCollection(iSrs) 

     Select Case srs.ChartType 
      Case xlRadar, xlRadarFilled, xlRadarMarkers 

      Npts = srs.Points.Count 

      Xnode = Xleft + Xwidth/2 * _ 
       (1 + (srs.Values(Npts) - Rmin)/(Rmax - Rmin) _ 
       * Sin(2 * dPI * (Npts - 1)/Npts)) 

      Ynode = Ytop + Yheight/2 * _ 
       (1 - (srs.Values(Npts) - Rmin)/(Rmax - Rmin) _ 
       * Cos(2 * dPI * (Npts - 1)/Npts)) 

      With cht.Shapes.BuildFreeform _ 
       (msoEditingAuto, Xnode, Ynode) 
       For Ipts = 1 To Npts 

       Xnode = Xleft + Xwidth/2 * _ 
        (1 + (srs.Values(Ipts) - Rmin)/(Rmax - Rmin) _ 
        * Sin(2 * dPI * (Ipts - 1)/Npts)) 

       Ynode = Ytop + Yheight/2 * _ 
        (1 - (srs.Values(Ipts) - Rmin)/(Rmax - Rmin) _ 
        * Cos(2 * dPI * (Ipts - 1)/Npts)) 

       .AddNodes msoSegmentLine, msoEditingAuto, _ 
        Xnode, Ynode 
       Next 
       Set myShape = .ConvertToShape 
      End With 

      For Ipts = 1 To Npts 
       myShape.Nodes.SetEditingType 3 * Ipts - 2, msoEditingSmooth 
      Next 

      Select Case iSrs 
       Case 1 
       iFillColor = 44 
       iLineColor = 12 
       Case 2 
       iFillColor = 45 
       iLineColor = 10 
       Case 3 
       iFillColor = 43 
       iLineColor = 17 
      End Select 

      With myShape 
       .Fill.ForeColor.SchemeColor = iFillColor 
       .Line.ForeColor.SchemeColor = iLineColor 
       .Line.Weight = 1.5 
       .Fill.Transparency = 0.5 
      End With 
     End Select 
     Next 

    End Sub 

Répondre

2

Vous devez définir cht à un objet de graphique.

EDIT À la lumière du code ci-dessus, je pense que vous trouverez que vos problèmes disparaissent si vous sélectionnez un graphique.

Sub DrawSmoothTransparentShapesOnRadarChart() 
     Dim cht As Chart 
     ''Delete this line, or comment it: 
     ''Set cht = Worksheets(1).ChartObjects(1) 

     Dim srs As Series 
     Dim iSrs As Long 
     Dim Npts As Integer, Ipts As Integer 
     Dim myShape As Shape 
     Dim Xnode As Double, Ynode As Double 
     Dim Rmax As Double, Rmin As Double 
     Dim Xleft As Double, Ytop As Double 
     Dim Xwidth As Double, Yheight As Double 
     Dim dPI As Double 
     Dim iFillColor As Long 
     Dim iLineColor As Long 

     ''This line set cht equal to the selected chart 
     Set cht = ActiveChart 
+0

Comment puis-je faire cela? –

+1

J'ai ajouté une note – Fionnuala

+0

il est impossible d'obtenir la propriété chartobjects de la classe worksheets –

Questions connexes