VBA Excel:指定的维度对当前图表types无效

我试图用vba保存excel图表作为图像。 在整个代码中,我会调用几个工作簿,查找所有工作表并保存所有图表。 以下代码适用于Excel 2007和2010(但由于+ 4,存在水平线和垂直线)。 如果我将round(shp.Width + 4,0)更改为Round(shp.Width,0),则2010年(但不是2007年)中出现以下错误:

运行时错误“-2147467259(80004005)”:指定的维度对当前的图表types无效。

Dim shp As Shape Dim sht As Worksheet Set sht = Application.ActiveWorkbook.Sheets(shtName) Set shp = sht.Shapes(chrtName) shp.CopyPicture xlScreen, xlBitmap Dim objChart As ChartObject Set objChart = sht.ChartObjects.Add(200, 200, Round(shp.Width + 4, 0), Round(shp.Height + 4, 0)) objChart.Activate ActiveChart.Paste ActiveChart.Export Filename:=fullPath, Filtername:=Right(fullPath, 3) objChart.Delete 

有人知道我怎样才能避免使用+4?

我发现以下内容:

“如果默认图表types设置为其他图表types而不是您尝试创build的图表types,则会出现此问题。例如,如果您尝试创build折线图,并且如果Excel中的默认图表是OHLC(烛台图表),则Excel会很快抱怨“指定的维度对当前图表types无效”,即使您尝试从VB.NET创build图表,也会发生同样的情况,因此,首先将默认图表types更改为某些基本图表types就像折线图一样,问题就解决了。“ http://www.excelbanter.com/showthread.php?t=204071

但我不知道如何用VBA做到这一点。

使用

Set objChart = Worksheet.Shapes.AddChart2().Chart.Parent

代替

Set objChart = Worksheet.ChartObjects.Add()

前一个函数允许你在第二个参数中指定一个基本的图表types。

很久没有答案。

你需要做两件事情。 首先,确保没有select数据,否则Excel可能会尝试将其放入您创build的图表中。

插入这个块

 Dim rngTmp as range If Typename(Selection) = "Range" then Set rngTmp = selection End If With ActiveSheet .Range("A1").Offset(.Rows.Count - 1).Select End With 

在线之前

 Set objChart = sht.ChartObjects.Add(...) 

并在上面的行后插入以下内容

 ObjChart.Chart.ChartType = xlLine ' or another "safe" chart type If Not rngTmp is Nothing then rngTmp.select End If 

严格来说,如果不是将数据添加到图表中,则不需要更改图表types,但是为了OCD,最好是完整的。