Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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 vba将图像插入范围时出现代码错误_Excel_Vba - Fatal编程技术网

使用excel vba将图像插入范围时出现代码错误

使用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

我正在创建一个excel模板,用户可以在其中选择一系列单元格,然后单击一个按钮,提示用户选择图像文件。 选择图像文件后,应将图像大小调整到选定范围

以下是我目前的代码:

    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
。@Dschuli
ImageObject
已声明为
Picture
OLE对象,而不是
Shape
,以便对问题进行排序。不过,如果有人尝试使用
形状
,这是一个很好的提示。使用
.printObject
也可能会遇到问题。似乎是
controlFormat
的属性。请改为尝试
.controlFormat.printObject
。@Dschuli
ImageObject
已声明为
Picture
OLE对象,而不是
Shape
,以便对问题进行排序。如果有人尝试使用
形状
,这是一个很好的选择。