首页 > 解决方案 > 为什么图表对象粘贴方法不起作用?

问题描述

当前代码:

Const cName = "ChartDummy"
Const rName = "Availability"
Const iconSource = "C:\user.name\defaulfolder\"
'/* Availability is a named Range for this example but can be any valid range */
'/* UF_EmoTrans is a Userform with and Image Control named I_Console */

Dim oCh As ChartObject, chImg As String
Dim Ch As Object

Application.DisplayAlerts = False
With Sheet2
  '.Activate
  chImg = iconSource & "availIcon.jpg"

  Set oCh = .ChartObjects.Add(370, 14, 180, 277.2): oCh.Name = cName
  .Range(rName).CopyPicture xlScreen, xlBitmap

  'oCh.Activate
  oCh.Chart.Paste
  oCh.Chart.Export chImg, "JPG"
  '/* I call this procedure at UserForm_Initialize */
  UF_EMOTrans.I_Console.Picture = LoadPicture(chImg)
  oCh.Delete

End With

我当前的代码在我以中断模式运行时有效(使用 F8 并单步执行每一行)。
它将范围导出为图像(通过图表对象)并将其加载到用户窗体就可以了。

图像控制的外观

现在,当我在执行模式下运行它(加载表单)时,它不会产生相同的结果。
似乎该oCh.Chart.Paste方法没有触发,因此图表中没有粘贴任何图像。
导出后,它会生成一张纯白色背景的图片。

不处于中断模式时的外观

所以我的问题是,为什么会这样?为什么它的行为不同?

PS:如果在粘贴(注释行)之前激活图表(但您需要先激活工作表),它将起作用。
但我只是想知道这是否是 Excel 中我们必须忍受的那些怪事之一。

标签: vbaexcel

解决方案


当你显示用户窗体时,显示用户窗体无模式。

或当您的程序包含 userform.show 时,图像效果很好。

UF_EMOTrans.Show (vbModeless)

或者

UF_EMOTrans.Show (0)

推荐阅读