4

我正在尝试将 Excel 图表保存为图像。

使用整个代码,我调用了几个工作簿,查找所有工作表并保存所有图表。

以下代码适用于 Excel 2007 和 2010(但由于 + 4 存在可见的水平和垂直线)。如果我将其更改为Round(shp.Width + 4, 0)2010Round(shp.Width, 0)年(但不是 2007 年)出现以下错误:

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

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?

我发现了以下内容:

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

我怎样才能用 VBA 做到这一点?

4

3 回答 3

2

我得到了同样的例外。我将问题追溯到保存路径。

如果保存路径错误,或者指定的路径不存在,则会引发此异常。检查以确保路径存在。

于 2019-06-27T09:06:12.633 回答
1

很久没有回答。

你需要做两件事。首先,确保没有选择任何数据,否则 Excel 可能会尝试将其放入您正在创建的图表中。

插入此块

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

严格来说,如果不是在图表中添加数据,则不需要更改图表类型,但为了强迫症,最好是完整的。

于 2014-06-09T23:17:46.150 回答
1

利用

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

代替

Set objChart = Worksheet.ChartObjects.Add()

前一个函数允许您在第二个参数中指定基本图表类型。

于 2017-05-19T16:31:40.217 回答