excel:对象变量或块变量未设置
问题描述:
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
答
您需要将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
我该怎么做? – 2009-12-17 23:09:02
我已添加注释 – Fionnuala 2009-12-17 23:17:47
它表示无法获得工作表类的chartobjects属性 – 2009-12-17 23:27:14