【发布时间】:2015-08-03 09:42:42
【问题描述】:
代码目标
我在名为 picCompanyLogo 的“控制表”上有一个公司徽标的图像对象。我有几个工作表,每个工作表在Worksheet_Activate 事件中都有相同的代码,用于从“控制表”复制公司徽标并将其粘贴到 A1 的标题中。我正在计算行的大小和公司徽标图像的大小,以确保它始终位于工作表的右侧。
代码问题
该代码在 32 位和 64 位版本的所有 Excel 版本上运行良好。我有一个运行 Excel 2013 的用户,代码以错误终止:
错误 1004 - 将对象粘贴到“Range.A1”时,Worksheet 类的粘贴方法失败。
当我单步执行代码 (F8) 时,没有问题,但如果我在代码执行之前设置了 Stop 然后 F5,它会产生相同的错误。
If Sheets("ControlSheet").Shapes("picCompanyLogo").Name <> "picCompanyLogo" Then
MsgBox "[MODULE: Worksheet Change(Header):Worksheet_Activate]" & vbCrLf & _
"The CompanyLogo (picCompanyLogo) is missing from the Control worksheet (ControlSheet)." & vbCrLf & vbCrLf & _
"The application will continue but please contact IT Support to correct the issue.", _
vbOKOnly, _
"MISSING COMPANY LOGO"
Else
Application.EnableEvents = False
ThisWorkbook.Sheets("ControlSheet").Shapes("picCompanyLogo").Copy
ThisWorkbook.ActiveSheet.Paste Range("A1")
Application.CutCopyMode = False
lngCompanyLogoWidth = Sheets("ControlSheet").Shapes("picCompanyLogo").Width
With ThisWorkbook.ActiveSheet.Shapes("picCompanyLogo")
.Left = lngShapeWidth - lngCompanyLogoWidth - 2
.Top = ActiveSheet.Range("B:" & strLastColLetter).Top + 2
End With
Application.EnableEvents = True
End If
我已插入以下行:
Application.EnableEvent
Application.CutCopyMode
两者都对 Office 2013 中的错误没有影响,并且该过程在其他版本的 Excel 中继续按预期工作。
在单步执行代码时,如果我在 F8 上的速度太快,粘贴似乎可以工作,即没有报告错误,但该过程随后失败:
With ThisWorkbook.ActiveSheet.Shapes("picCompanyLogo")
.Left = lngShapeWidth - lngMulberyLogoWidth - 2
.Top = ActiveSheet.Range("B:" & strLastColLetter).Top + 2
End With
错误表明无法在工作表上找到该形状,这让我认为粘贴没有达到我的预期。
【问题讨论】:
-
当你通过粘贴代码 F8 时,你能打开 ActiveSheet 并查看是否粘贴了徽标吗?另外,在您上一个代码 sn-p 中,错误具体发生在哪一行?
-
我有两台显示器,一台显示工作表,另一台显示代码,我可以看到,当我通过 F8 时,图像被粘贴到 A1 的左上角。要回答您的第二点,它会在 With ThisWorkbook.ActiveSheet.Shapes("picCompanyLogo") 上出错
标签: excel paste excel-2013 vba