运行动态创建的工作表上的代码时出现运行时错误1004

时间:2015-06-25 13:48:19

标签: excel vba excel-vba runtime-error excel-2010

我正在使用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

它可以在任何Sheet或其他工作簿中完美地运行,但是当我尝试在动态创建的工作表上运行它时,VBA会返回错误(1004)并突出显示以下行:

Set n = ActiveSheet.Pictures.Insert(flname)

我在互联网上搜索但是可以在动态创建的表格中找到关于1004错误的任何话题。

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

亲切的问候, 雨果。

1 个答案:

答案 0 :(得分:1)

问题是我用来生成表格的代码也锁定了它们。我认为解锁与代码相关联的Range会使它工作,问题是当你插入一个图像时,它不包含在单元格或单元格区域中,它基本上“漂浮”在工作表上,因此图像可以没有插入,因为工作表被锁定,这就是我得到错误1004和突出显示的行是

的原因
Set n = ActiveSheet.Pictures.Insert(flname)

因为那是在图纸中插入图像的操作。

解决方案非常简单,只需要在代码开头(或插入图像的行上方)解锁工作表:

ActiveSheet.Unprotect "Your Passoword"

最后,如果你想再次锁定它,你可以添加以下行:

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

我希望我的答案足够明确。 感谢所有试图帮助我的人。

亲切的问候, 雨果。