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

我在第三行发现此错误。有谁知道为什么?excel:对象变量或块变量未设置

这里是完整的代码。请记住,这是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 

回答

2

您需要将cht设置为图表对象。

编辑根据上面的代码,我认为你会发现如果你选择一个图表,你的问题就会消失。

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

我该怎么做? – 2009-12-17 23:09:02

+1

我已添加注释 – Fionnuala 2009-12-17 23:17:47

+0

它表示无法获得工作表类的chartobjects属性 – 2009-12-17 23:27:14

相关问题