excel:对象variables或块variables未设置

Dim cht As Chart Dim Xleft As Double, Ytop As Double Xleft = cht.PlotArea.InsideLeft 

我在第三行得到这个错误。 有谁知道为什么?

这里是完整的代码。 请记住,这是优秀的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设置为图表对象。

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

 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