Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 2016 VBA从工作表复制图片,并在另一工作表的文本框中自动调整_Excel_Vba_Image_Textbox_Autosize - Fatal编程技术网

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

Excel 2016 VBA从工作表复制图片,并在另一工作表的文本框中自动调整,excel,vba,image,textbox,autosize,Excel,Vba,Image,Textbox,Autosize,我有一个图片“图片1”在左上角的表“标志”。 这是通过另一个宏实现的。 现在我想要一个宏来复制“图片1”并粘贴在“Voorblad”页上的文本框“TextboxLogo”中。 图片应该自动调整到文本框高度的90%,以垂直和水平居中为中心。 这是我目前掌握的代码: Sub Macro1() Dim picture As Shape Sheets("Logo").Activate picture = ActiveSheet.Shapes.Range(Array("Picture 1")) Shee

我有一个图片“图片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,对象变量或with block变量未设置。 我搜索过这个论坛和谷歌,但没有成功

我希望我能这样走运

Shape
是对象类型,
picture
是对象变量

不能像这样指定对象引用。运行时错误告诉您的是,
Set
关键字丢失

Set picture = ActiveSheet.Shapes.Range(Array("Picture 1"))

也就是说你不需要做
表单(“Logo”)。激活

Set picture = ActiveWorkbook.Worksheets("Logo").Shapes.Range(Array("Picture 1"))
或者,如果运行宏的工作簿在编译时存在
“Logo”
工作表,请将其
(名称)
属性设置为,例如,
LogoSheet
,然后可以执行以下操作:

Set picture = LogoSheet.Shapes.Range(Array("Picture 1"))
如果它存在于运行宏的工作簿中,但仅在运行时创建,则不需要
ActiveWorkbook

Set picture = ThisWorkbook.Worksheets("Logo").Shapes.Range(Array("Picture 1"))

如果形状
图片1
是单个形状,则
范围(数组(…)
内容是多余的,这可能是您所需要的全部(假设您将该工作表的
(名称)
属性设置为
LogoSheet

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

感谢您的澄清,我们做了更改,但在尝试将图片添加到文本框时,宏的第二部分仍然出错(运行时错误13类型不匹配)@JensDamen per,似乎是
Fill。UserPicture
需要的是路径/文件名,而不是
Shape
对象。这可能是您的类型不匹配。知道如何更改吗?我尝试用vba通过谷歌搜索在形状中添加形状,但似乎没有什么符合我的需要。这与理解运行时错误91为什么会得到thr完全不同当您不使用
Set
关键字分配对象变量时,您可以拥有。您需要在磁盘上获取所需图片,并使用文件名加载。因此,在运行宏时,我将其工作方式更改为手动图片选择器。但现在代码拒绝接受.png文件,我的徽标数据库中有50%是.png文件。
Set picture = ThisWorkbook.Worksheets("Logo").Shapes.Range(Array("Picture 1"))
Set picture = LogoSheet.Shapes("Picture 1")