2017-03-15 86 views
0

我对VBA还是有点新鲜,而且我很难将对象定义为形状。我有一个带有矩形的Excel工作表,我想从我的VBA用户窗体中的组合框中更改此形状的颜色。我已经尝试了下面的代码和其他几种方法,但是我一直在遇到“形状”不是类型的错误,并且这阻止了我使用填充等成员。这可能有助于知道我正在使用VBA 2015,因为我知道这两年之间存在一些差异VBA 2015“形状”类型undefined

Dim rectangle as Shape 
rectangle = sheet1.shapes("rectangle 1") 
rectangle.Fill.Forecolor.RGB = RGB(255, 255, 255) 
+2

您需要使用'Set'关键字为变量分配对象时:'设置矩形= sheet1.shapes(“矩形1”)' – tigeravatar

+0

在2015年你不需要为了这个词“套”分配对象。 “Let”和“set”不再受支持。工作很好,一起删除“设置”一词。但是仍然使用“形状”类型,这是我遇到的问题 – Nicki

+0

在将对象分配给对象变量时,您绝对需要使用“Set”关键字。以下是Office 2013及更高版本MSDN网站的官方文档:https://msdn.microsoft.com/en-us/library/office/gg251642.aspx我无法找到任何内容来支持您的声明Let and Set is不再支持。也许在Visual Basic或.NET中,或者在创建自定义类时都是如此? – tigeravatar

回答

0

这是行得通吗?

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

谢谢!我试过,我不再得到相同的错误,但我得到的项目未找到错误。你通过形状传递的参数是单元名称,对不对? – Nicki

+0

不,不是单元名称,形状名称。当你点击形状时,它的名字应该出现在格式选项卡上的小下拉框中。 –

0

运行它以列出Sheet1上的形状。你确定你有一个“矩形1”吗?

Sub ListShapes() 
    For Each s In Sheets("Sheet1").Shapes 
     MsgBox s.Name 
    Next 
End Sub