为什么图表对象的粘贴方法不起作用?

时间:2018-10-06 03:47:55

标签: excel vba excel-vba

当前代码:

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并逐行浏览)运行它时,我当前的代码有效。
它将 Range 导出为图像(通过chartobject)并将其加载到用户窗体中。

How Image Control Looks

现在,当我以执行模式(加载表单)运行它时,它不会产生相同的结果。
看来oCh.Chart.Paste方法没有启动,因此图表中没有粘贴图像。
导出后,它会产生一张带有纯白色背景的图片。

How it looks when in not in break mode

所以我的问题是,为什么呢?为什么行为不同?

PS : 如果在粘贴(注释线)之前激活了图表(但您需要先激活工作表),它将起作用。
但是我只想知道这是否就是我们不得不忍受的Excel奇怪之处之一。

1 个答案:

答案 0 :(得分:0)

显示用户窗体时,请显示无模式的用户窗体。

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

UF_EMOTrans.Show (vbModeless)

UF_EMOTrans.Show (0)