我在工作表“徽标”的左上角有一张图片“ Picture 1”。 这是通过另一个宏到达的。 现在,我想要一个宏来复制“图片1”并将其粘贴到“ Voorblad”工作表的文本框“ TextboxLogo”中。 图片应自动调整为文本框高度的90%,并以垂直和水平居中居中。
这是我到目前为止获得的代码:
Sub Macro1()
Dim picture As Shape
Sheets("Logo").Activate
picture = ActiveSheet.Shapes.Range(Array("Picture 1"))
Sheets("Voorblad").Visible = True
With Sheets("Voorblad").Shapes("TextBoxLogo").Fill
.Visible = True
.UserPicture picture
.TextureTile = True
.RotateWithObject = True
End With
End Sub
由于图片与所有单元格重叠,我不得不使用文本框。
运行此命令时,出现运行时错误91,对象变量或未设置块变量。 我已经搜索了这个论坛和Google,但没有成功。
我希望我能这样幸运
答案 0 :(得分:1)
Dim picture As Shape
Shape
是对象类型,picture
是对象变量。
picture = ActiveSheet.Shapes.Range(Array("Picture 1"))
您不能像这样分配对象引用。运行时错误告诉您的是,Set
关键字缺失。
Set picture = ActiveSheet.Shapes.Range(Array("Picture 1"))
那表示您不需要Sheets("Logo").Activate
。
Set picture = ActiveWorkbook.Worksheets("Logo").Shapes.Range(Array("Picture 1"))
或者,如果"Logo"
工作表在编译时在运行宏的工作簿中存在,请将其(Name)
属性设置为LogoSheet
,然后就可以执行此操作:
Set picture = LogoSheet.Shapes.Range(Array("Picture 1"))
如果它在运行宏的工作簿中存在,但仅在运行时创建,则您也不需要ActiveWorkbook
:
Set picture = ThisWorkbook.Worksheets("Logo").Shapes.Range(Array("Picture 1"))
如果形状Picture 1
是单个形状,则.Range(Array(...))
东西是多余的,而这可能就是您所需要的(假设您将该工作表的(Name)
属性设置为{ {1}}:
LogoSheet