我正在使用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错误的任何话题。
对不起我的英文,并提前感谢您的帮助!
亲切的问候, 雨果。
答案 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
我希望我的答案足够明确。 感谢所有试图帮助我的人。
亲切的问候, 雨果。