错误424需要对象

时间:2015-01-13 09:52:55

标签: vba excel-vba shape excel

我的想法是引用名为Table1的第一个工作表的单元格J9中的字母表,并自动为称为"测试"的形状着色。在活动工作表上。所以基本上如果输入的字母是" a"在第一个工作表的单元格J9中,形状"测试"在工作表2上应该给出颜色1,如果" b",颜色2等等。我已经为它编写了一个代码,但遗憾的是我一直收到Error 424 Object Required。任何帮助将深表感谢!谢谢!

Sub test()
If Table1.Range("J9") = "a" Then
ActiveSheet.Shapes("Test").Fill.ForeColor.SchemeColor = 1

ElseIf Table1.Range("J9") = "b" Then
ActiveSheet.Shapes("Test").Fill.ForeColor.SchemeColor = 2

ElseIf Table1.Range("J9") = "c" Then
ActiveSheet.Shapes("Test").Fill.ForeColor.SchemeColor = 3

ElseIf Table1.Range("J9") = "d" Then
ActiveSheet.Shapes("Test").Fill.ForeColor.SchemeColor = 4

Else
ActiveSheet.Shapes("Test").Fill.ForeColor.SchemeColor = 5

4 个答案:

答案 0 :(得分:0)

看起来不是形状代码而是Table1。表使用特殊的结构化寻址系统(参见Select, get and set data in Table)。如果你只想要来自单元格J9的值那么这应该这样做。

With Sheets("Table 1")
    Select Case LCase(.Range("J9").Value)
        Case "a"
            .Shapes("Test").Fill.ForeColor.SchemeColor = 1
        Case "b"
            .Shapes("Test").Fill.ForeColor.SchemeColor = 2
        Case "c"
            .Shapes("Test").Fill.ForeColor.SchemeColor = 3
        Case Else
            ' do nothing
    End Select
End With

如果对J9的简单引用不足,则必须提供有关 Table1 的确切性质的更多信息。

修改

您可能无法正确引用形状的名称。此代码将枚举表1工作表中的所有hte形状,并将其名称返回到VBE的立即窗口(在VBE中为 Ctrl + G )。

Dim i As Long
With Sheets("Table 1")
    For i = 1 To .Shapes.Count
        Debug.Print .Shapes(i).Name
    Next i
End With

测试那里有一个名字吗?你能确定你想要改变的形状的名称吗?

答案 1 :(得分:0)

更改所有Table1对工作表的引用(" Table1")是否修复了它?例如:

If Worksheets("Table1").Range("J9") = "a" Then
ActiveSheet.Shapes("Test").Fill.ForeColor.SchemeColor = 1

答案 2 :(得分:0)

@Jeeped如果我使用苹果,橙子和柠檬而不是字母表,它是否相同?我更改了我的代码,使其与您的代码类似。这次没有错误信息,但没有任何反应

Sub test()
With ActiveSheet
    Select Case LCase(.Range("J9").Value)
        Case "apple"
            .Shapes("Test").Fill.ForeColor.SchemeColor = 1
        Case "orange"
            .Shapes("Test").Fill.ForeColor.SchemeColor = 2
        Case "lemon"
            .Shapes("Test").Fill.ForeColor.SchemeColor = 3
        Case Else
            ' do nothing
    End Select
End With

End Sub

此代码有什么问题吗?顺便问一下,什么是LCase ??

答案 3 :(得分:0)

Sub SO()

ActiveSheet.Shapes("Test").Fill.FillColor.SchemeColor = Asc(UCase(Sheets("Table 1").Range("J9"))) - 64

End Sub