Excel Visual Basic代码问题

时间:2015-02-16 04:25:59

标签: excel excel-vba vba

我正在设计一个PO,它会根据下拉列表中选择的项目更改每个单位的成本。

我正在使用......

Sub DropDown8_Change()
If (DropDown8.SelectedItem = "1") Then
    Range("E21").Value = "54.90"
End If
End Sub

但是我收到了错误,

  

运行时错误'424':需要对象

如果我删除了IF语句并让它只是更改了Cell的内容,它就可以工作..所以我假设它是条件语句的问题。

从我在Visual Studio中使用Visual Basic的过去看来,Control的名称包含在Method中,所以我很困惑。我可能在这里犯了很多错误所以忍受我:)。

提前致谢

1 个答案:

答案 0 :(得分:2)

在Excel工作表上使用Shapes有点烦人。如果可以的话,我通常会远离他们。

以下是您获取所需数据的方式:

Sub DropDown8_Change()
    Dim selectedItem As String
    Dim ws As Excel.Worksheet
    Set ws = Sheets(1)

    Dim selectedIndex As Long
    selectedIndex = ws.Shapes("Drop Down 8").ControlFormat.Value
    selectedItem = ws.Shapes("Drop Down 8").ControlFormat.List(selectedIndex)

    If (selectedItem = "1") Then
        Range("E21").Value = "54.90"
    End If
End Sub

问题在于,为您生成的方法(在您的情况下为DropDown8_Change())并不能给您带来太多帮助(例如Worksheet_Change(ByVal Target As Range)),你必须处理VBA Shapes(哎呀)。

你需要通过它的实际名称来引用Shape(除非你知道Shape的索引,它不容易确定)。通过右键单击形状,然后查看公式栏左侧的“范围地址”文本框,可以找到该名称。然后你必须通过整个ControlFormat篮球来获得你正在寻找的东西。

抱歉咆哮。我讨厌VBA Shapes。