在dynamic创build的工作表上运行代码时,运行时错误1004

我正在使用Excel 2010,并在一个工作簿中编写了这些代码:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim flname As Variant, n As Variant If Selection.Count = 1 Then If Not Intersect(Target, Range("D5:H20")) Is Nothing Then flname = Application.GetOpenFilename If flname <> False Then If Right(flname, 3) = "jpg" Then Set n = ActiveSheet.Pictures.Insert(flname) n.Name = "Picture 1" ActiveSheet.Shapes("Picture 1").Left = ActiveSheet.Cells(5, 4).Left ActiveSheet.Shapes("Picture 1").Top = ActiveSheet.Cells(5, 4).Top n.Width = 270 ActiveSheet.Shapes.Range(Array("Picture 1")).Select Selection.ShapeRange.IncrementLeft 10 Selection.ShapeRange.IncrementTop 2 Else MsgBox "Das Bild muss ein JPEG-Format sein" End If End If End If End If End Sub 

它在任何工作表或其他工作簿上工作得都很好,但是当我尝试在dynamic创build的工作表上运行它时,VBA返回一个错误(1004)并突出显示以下行:

 Set n = ActiveSheet.Pictures.Insert(flname) 

我在互联网上search,但coulndfind关于dynamic创build表单1004错误的任何主题。

对不起,我的英语,并提前感谢您的帮助!

亲切的问候,雨果。

问题是我用来生成表格的代码也locking了它们。 我认为解锁与代码相关的范围会使其工作,问题是,当你插入一个图像它不包含在一个单元格或单元格的范围它基本上“浮动”的工作表,所以图像可能不被插入,因为表被locking,这就是我得到错误1004和突出显示的行的原因

 Set n = ActiveSheet.Pictures.Insert(flname) 

因为这是插入图片中的图像的行为。

该解决scheme非常简单,只需在代码开始时(或插入图像的上方)解开表单即可:

 ActiveSheet.Unprotect "Your Passoword" 

最后,如果您想再次locking,请添加以下行:

 ActiveSheet.Protect Password:="Your Password", DrawingObjects:=True, Contents:=True, Scenarios:=True 

我希望我的回答很清楚。 感谢所有试图帮助我的人。

亲切的问候,雨果。