【发布时间】:2014-09-04 13:52:04
【问题描述】:
我有一个 VBA 代码,用于将范围复制为图片并将它们粘贴到图表中。它这样做是为了让我可以将其保存到图片中。这段代码有 70% 的成功率,当它不起作用时,它会给出错误“范围类的 CopyPicture 方法失败”。我不明白为什么它有时可以工作,有时却不能接受相同的输入。
谁能帮忙?
Public Sub ExportRange(workbookPath As String, sheetName As String, rangeString As String, savepath As String)
Set tempWorkBook = Workbooks.Open(workbookPath)
Dim selectRange As range
Set selectRange = Worksheets(sheetName).range(rangeString)
Dim numRows As Long
numRows = selectRange.Rows.Count
Dim numCols As Long
numCols = selectRange.Columns.Count
' Transfer selection to a new sheet and autofit the columns
selectRange.Copy
Dim tempSheet As Worksheet
Set tempSheet = Sheets.Add
tempSheet.range("A1").PasteSpecial xlPasteAll
ActiveSheet.UsedRange.Columns.AutoFit
Set selectRange = ActiveSheet.UsedRange
selectRange.Select
selectRange.CopyPicture xlScreen, xlPicture
Dim tempSheet2 As Worksheet
Set tempSheet2 = Sheets.Add
Dim oChtobj As Excel.ChartObject
Set oChtobj = tempSheet2.ChartObjects.Add( _
selectRange.Left, selectRange.Top, selectRange.Width, selectRange.Height)
Dim oCht As Excel.Chart
Set oCht = oChtobj.Chart
oCht.Paste
oCht.Export filename:=savepath
oChtobj.Delete
Application.DisplayAlerts = False
tempSheet.Delete
tempSheet2.Delete
tempWorkBook.Close
Application.DisplayAlerts = True
End Sub
【问题讨论】:
-
同一图像/工作表等是否失败?还是在不同的情况下?就像您运行一个循环执行 100 次一样,它是在某些情况下运行 0 次,而在其他情况下运行 100 次,还是在两者之间运行某个数字然后因错误而停止?
-
同一图像和工作表失败。我用 6 张图片循环运行这个 Sub,当它失败时,它可以在任何一张图片上失败,不一定总是同一张。
-
尝试在
Application.EnableEvents = False和Application.EnableEvents = True中包含你的主要代码逻辑 -
刚试过,同样的问题。有时它起作用有时不起作用。如果没有,它不会每次都停在 6 张图像循环的同一部分。
-
我用一张白纸替换了我从中复制范围的工作簿,它也会产生错误,也许更常见。会不会是代码运行的太快了,有些部分没有等待前面的代码完成?
标签: excel vba charts copy-paste