我有一个与this one极为相似的问题,我有:
Range.CopyPicture
方法并将范围作为图片粘贴到第二张,但如果您知道粘贴迷你图本身以便在我再次更新raneg时不会更新它,请告诉我们知道)现在,我的问题是,如果我在调试模式中单步执行代码,一切都运行良好,但如果我让宏自动运行,迷你线永远不会更新(所以它总是看起来像第一次宏运行)。
作为我的问题的一个简单示例,假设我在工作表中有这个:
Cells A1-A10:
1,2,3...,10 (what I'll use for the sparkline range)
Cell Named "StartCol":
=RANDBETWEEN(1,9)
Cell Named "Width":
=RANDBETWEEN(1,10-StartCol)
Dynamic range Named "SparkRange":
=OFFSET(Sheet1!$A$1,0,StartCol-1,1,Width)
Cell With a SparkLine within a larger range Named "ToCopy"
A Second Sheet Named "OutPut" with a named range "Output" where we'll start pasting to
现在,简单的VBA代码:
Sub Test()
Sheets("Output").Select
For i = 1 To 10
Application.Calculate ' Probably not needed, but putting it in to be safe
Sheets("Sheet1").Range("ToCopy").CopyPicture
Sheets("Output").Range("Output").Select
Sheets("Output").Paste
Sheets("Output").Names("output").RefersTo = Sheets("Output").Range("Output").Offset(Sheets("Sheet1").Range("ToCopy").Rows.Count + 2)
Next i
End Sub
现在,这应该粘贴在10个不同的迷你图中,但它相当于粘贴同一个的10个副本。如果我在调试模式中单步调试(或者甚至设置断点然后在VBA中点击F5
,那么它可以工作!)
再次,我看了上面提到的问题并尝试了它的技巧无济于事....任何人都知道如何使这个工作的迷你线????
非常感谢!!!
答案 0 :(得分:1)
当您不断进行涉及excel / system处理多个事件的重复练习时,建议使用DoEvents
将它们分开。
例如,在您的情况下,您需要给Excel足够的时间将图像复制到剪贴板中,然后将其粘贴回来。
例如
Sheets("Sheet1").Range("ToCopy").CopyPicture
Doevents '<~~ This gives enough time for the pic to be placed in Clipboard
Sheets("Output").Paste
DoEvents '<~~ This gives enough time for the pic to be pasted
在更多技术术语中,DoEvents
放弃执行宏,以便操作系统可以处理其他事件。 DoEvents
函数将控制权从应用程序传递给操作系统。
注意:明智地使用DoEvents
是首选,否则您最终会不必要地放慢代码速度。