Excel 2016 VBA从工作表复制图片并在另一工作表的文本框中自动调整

时间:2018-10-22 14:35:14

标签: excel vba image textbox autosize

我在工作表“徽标”的左上角有一张图片“ 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,但没有成功。

我希望我能这样幸运

1 个答案:

答案 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