使用excel vba将图像插入范围时出现代码错误
我正在创建一个excel模板,用户可以在其中选择一系列单元格,然后单击一个按钮,提示用户选择图像文件。 选择图像文件后,应将图像大小调整到选定范围 以下是我目前的代码:使用excel vba将图像插入范围时出现代码错误,excel,vba,Excel,Vba,我正在创建一个excel模板,用户可以在其中选择一系列单元格,然后单击一个按钮,提示用户选择图像文件。 选择图像文件后,应将图像大小调整到选定范围 以下是我目前的代码: Sub InsertImagetoRange() Dim ImageFile As Variant Dim ImageObject As Picture Dim myRange As Range With Application Set myRange = .Selection
Sub InsertImagetoRange()
Dim ImageFile As Variant
Dim ImageObject As Picture
Dim myRange As Range
With Application
Set myRange = .Selection
End With
ImageFile = Application.GetOpenFilename(Title:="Select Picture To Be Imported")
If ImageFile = False Then Exit Sub
Set ImageObject = ActiveSheet.Pictures.Insert(ImageFile)
With ImageObject
.Left = ActiveSheet.Range(myRange).Left
.Top = ActiveSheet.Range(myRange).Top
.Width = ActiveSheet.Range(myRange).Width
.Height = ActiveSheet.Range(myRange).Height
.Placement = 1
.PrintObject = True
End With
End Sub
目前上面的代码将图像插入到正确的位置,但在后面立即给出错误提示
图像没有调整到所选范围,我使用了watch窗口查看该范围,并且myRange
变量似乎始终为空
非常感谢为我指明正确方向的任何帮助。使用
Stop
和F8,您可以快速确定错误在这一行:
.Left = ActiveSheet.Range(myRange).Left
原因是ActiveSheet.Range(myRange)
无效-接受A1格式的两个Range
对象或一个文本地址。由于myRange
是一个Range
对象,因此您既不提供它也不提供它
但是,由于myRange
是一个Range
对象,因此您只需执行以下操作:
.Left = myRange.Left
(不要忘记对顶部
、宽度
和高度
也做同样的操作!)
(当然,如果单元格myRange
包含单元格引用的文本,例如单元格A1包含文本“B3”,则代码不会出错-但是,它会将图像放在错误的单元格中,B3而不是A1)
至于您的另一个问题:myRange
如果未选择任何内容,则将被固定为Nothing
。如果选择
不是范围
——例如,如果您选择了一个图像,则会出现不同的错误(类型不匹配)
您可能希望用以下内容启动子系统
:
If Selection Is Nothing Then
MsgBox "Nothing is selected!", vbCritical
Exit Sub
ElseIf TypeName(Selection) <> "Range" Then
MsgBox "Please select a cell!", vbCritical
Exit Sub
End If
如果选择为空,则
MsgBox“未选择任何内容!”,vbCritical
出口接头
ElseIf TypeName(选择)“范围”然后
MsgBox“请选择一个单元格!”,vbCritical
出口接头
如果结束
使用Stop
和F8,您可以快速确定错误在这一行:
.Left = ActiveSheet.Range(myRange).Left
原因是ActiveSheet.Range(myRange)
无效-接受A1格式的两个Range
对象或一个文本地址。由于myRange
是一个Range
对象,因此您既不提供它也不提供它
但是,由于myRange
是一个Range
对象,因此您只需执行以下操作:
.Left = myRange.Left
(不要忘记对顶部
、宽度
和高度
也做同样的操作!)
(当然,如果单元格myRange
包含单元格引用的文本,例如单元格A1包含文本“B3”,则代码不会出错-但是,它会将图像放在错误的单元格中,B3而不是A1)
至于您的另一个问题:myRange
如果未选择任何内容,则将被固定为Nothing
。如果选择
不是范围
——例如,如果您选择了一个图像,则会出现不同的错误(类型不匹配)
您可能希望用以下内容启动子系统
:
If Selection Is Nothing Then
MsgBox "Nothing is selected!", vbCritical
Exit Sub
ElseIf TypeName(Selection) <> "Range" Then
MsgBox "Please select a cell!", vbCritical
Exit Sub
End If
如果选择为空,则
MsgBox“未选择任何内容!”,vbCritical
出口接头
ElseIf TypeName(选择)“范围”然后
MsgBox“请选择一个单元格!”,vbCritical
出口接头
如果结束
使用.printObject
也可能会遇到问题。似乎是controlFormat
的属性。请改为尝试.controlFormat.printObject
。@DschuliImageObject
已声明为Picture
OLE对象,而不是Shape
,以便对问题进行排序。不过,如果有人尝试使用形状
,这是一个很好的提示。使用.printObject
也可能会遇到问题。似乎是controlFormat
的属性。请改为尝试.controlFormat.printObject
。@DschuliImageObject
已声明为Picture
OLE对象,而不是Shape
,以便对问题进行排序。如果有人尝试使用形状
,这是一个很好的选择。