2009-12-17 53 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

相關問題