|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
复制一些对象,其中包含一些图表。因为要将他们导出为文件,所以我进行以下操作:
1.选中这些对象
2.复制为图片
3.粘贴,仅用于获取宽度和高度
4.新建一个ChartObjects,宽高和上述相同
5.再次粘贴
6.用Chart.Export导出为文件
问题出在第五步,没有粘贴出图片,图表区仍为空白。即使加了暂停,也仍为空白。
但如果设置断点逐语句执行,图像会正常粘贴。
经过一些排查,我认为问题出在"图表 1.2"上。如果"图表 1.2"很简单(数据少),那么粘贴不为空白。
这种情况要怎么办?
附件在原文件的基础上进行了简化。
windows11,office2021。但之前使用office2019也出现了同样的问题。
- Sub 保存为图片()
- 路径 = "D:/test.bmp"
- If Dir(路径) <> "" Then
- Kill 路径
- End If
-
- '复制为图片
- Sheet_1_2.Select
- ActiveSheet.Shapes.Range(Array("图表 1.2", "文本框 1.2 标题", "文本框 1.2_1", "文本框 1.2_2")).Select
- Selection.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
-
- '粘贴图片,用于获取宽度。当Selection为ShpeRange(选择多个图表)时,Width属性不可用,所以要先存为图片再获取Width
- Worksheets("temp").Select
- Cells(1, 1).Select
- ActiveSheet.Paste
- 宽度 = ActiveSheet.Shapes(1).Width
- 高度 = ActiveSheet.Shapes(1).Height
-
- '将图片转存为图表,大小相同,为了使用export函数将图表导出为图片
- Set 图表 = ActiveSheet.ChartObjects.Add(0, 0, 宽度, 高度)
- 图表.Chart.Parent.Select
- 图表.Chart.Paste '该语句执行后,图表区仍为空白。设置断点后逐语句执行不为空白
- ' Application.Wait (Now + TimeValue("00:00:02")) '暂停
- 图表.Chart.Export 路径, "BMP"
- 图表.Chart.Parent.Delete
- '删除所有图像
- ActiveSheet.Shapes.SelectAll
- Selection.Delete
- End Sub
复制代码
|
|