【问题标题】:Excel 2016 VBA copy picture from sheet and autofit in textbox on another sheetExcel 2016 VBA从工作表复制图片并自动调整到另一工作表的文本框中
【发布时间】:2018-10-22 22:49:33
【问题描述】:

我在“徽标”表的左上角有一张图片“图片 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,对象变量或块变量未设置。 我搜索了这个论坛和谷歌,但没有成功。

希望我能走上这条路

【问题讨论】:

    标签: excel vba image textbox autosize


    【解决方案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) 属性设置为LogoSheet

    Set picture = LogoSheet.Shapes("Picture 1")
    

    【讨论】:

    • 感谢您的澄清,进行了更改,但宏的第二部分在尝试将图片添加到文本框时仍然出错(运行时错误 13 类型不匹配)
    • @JensDamen per documentation,似乎 Fill.UserPicture 需要一个路径/文件名,而不是 Shape 对象。那将是您的类型不匹配
    • 知道如何改变这个吗?我尝试使用谷歌搜索在带有 vba 的形状内添加一个形状,但似乎没有什么适合我的需求
    • 这将是一个与理解为什么在不使用 Set 关键字分配对象变量时引发运行时错误 91 的问题完全不同的问题。您需要在磁盘somehow 上获取您想要的图片,并使用文件名加载它。
    • 所以我在运行宏时将其工作方式更改为手动图片选择器。但现在代码拒绝接受 .png 文件,我的徽标数据库中有 50% 是 .png 文件。
    猜你喜欢
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 2019-05-02
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多