2015年VBA“;形状“;类型未定义

2015年VBA“;形状“;类型未定义,vba,excel,Vba,Excel,我对VBA还是有点陌生,我很难将对象定义为形状。我有一个带有矩形的excel工作表,我想从VBA用户窗体的组合框中更改此形状的颜色。我尝试了下面的代码和其他几种方法,但是我一直遇到错误,即“shape”不是类型,这阻止了我使用fill之类的成员。了解我正在使用VBA 2015可能会有所帮助,因为我知道不同年份之间存在一些差异 Dim rectangle as Shape rectangle = sheet1.shapes("rectangle 1") rectangle.Fill.Forecol

我对VBA还是有点陌生,我很难将对象定义为形状。我有一个带有矩形的excel工作表,我想从VBA用户窗体的组合框中更改此形状的颜色。我尝试了下面的代码和其他几种方法,但是我一直遇到错误,即“shape”不是类型,这阻止了我使用fill之类的成员。了解我正在使用VBA 2015可能会有所帮助,因为我知道不同年份之间存在一些差异

Dim rectangle as Shape
rectangle = sheet1.shapes("rectangle 1")
rectangle.Fill.Forecolor.RGB = RGB(255, 255, 255)
这行吗

With sheet1.shapes("rectangle 1")
    .Fill.Forecolor.RGB = RGB(255, 255, 255)
End With

运行此命令以列出图纸1上的形状。你确定你有一个“矩形1”吗


将对象分配给变量时,需要使用
Set
关键字:
Set rectangle=sheet1.shapes(“rectangle 1”)
在2015年,分配对象不需要“Set”这个词。不再支持“Let”和“set”。将单词“set”一起删除效果很好。但是,它仍然使用“shape”类型,这就是我的问题所在。在将对象分配给对象变量时,您绝对仍然需要
Set
关键字。以下是MSDN网站上Office 2013及更高版本的官方文档:我找不到任何东西支持您关于不再支持Let和Set的说法。在Visual Basic或.NET中可能是这样,或者在创建自定义类时也是这样?还要注意的是,对于对象变量,您只需要使用
Set
关键字,对于非对象变量(例如字符串、长度等),这是不必要的(事实上会导致错误),@GordonBell显示的
With
语句作为替代解决方案应该可以正常工作。谢谢!我尝试了,我不再得到相同的错误,但我得到的项目没有找到错误。通过形状传递的参数是单元格名称,对吗?不,不是单元格名称,而是形状名称。单击形状时,其名称应显示在“格式”选项卡上的小下拉框中。
Sub ListShapes()
    For Each s In Sheets("Sheet1").Shapes
        MsgBox s.Name
    Next
End Sub