【问题标题】:Set cell vlookup value based on changing Combobox value根据更改的 Combobox 值设置单元格 vlookup 值
【发布时间】:2015-03-13 18:30:09
【问题描述】:

我在 Excel 工作表中输入了combobox。我希望它能够工作,以便无权访问VBA 的用户可以从dropdown 中选择一个值,然后另一个单元格中的值将对这个值执行vlookup

在第一个实例中,我插入了一个框并尝试基于此设置一个单元格值。

Sub InsertComboBox()

#inserts dropdown box on the front page and sets the values as the list of DMA from the pipe_totals sheet
#this should be the most complete list so will not change dependant on asset

Dim arearange As Range
Set arearange = Sheets("pipe_totals").Range("a:a")
lastrowi = Application.WorksheetFunction.CountA(arearange)

Sheets("front page").Activate
With Range("f5:g5")
Set Combo = ActiveSheet.DropDowns.Add(.Left, .Top, .Width, .Height)

End With

Combo.List() = Sheets("pipe_totals").Range("A2:A" & lastrowi).Value
.Range("k9").Value = Combo.Value 'only works on current combobox value which is 0

End Sub

我有什么方法可以设置这个,使vlookup 根据用户的选择是动态的?

【问题讨论】:

    标签: excel vba combobox vlookup


    【解决方案1】:

    在本例中,只需设置正确的组合名称。应该没问题,前提是您的组合框列出了上面提到的“Range("A2:A" & lastrowi)”中的值。

    Sub "comboname"_Change()
        Dim list_val As Long
    
        list_val = Worksheets("front page").Shapes("comboname").ControlFormat.Value
        Range("K9") = Worksheets("pipe_totals").Cells((list_val + 1), 1)
    End Sub
    
    Sub test()
        Dim z As Shape
            For Each z In Worksheets("front page").Shapes
                Debug.Print z.Name
            Next z
    End Sub
    

    【讨论】:

    • @dmitris,你在这里的建议是有道理的。然而,当我运行它时,它会给出运行时错误“指定集合的​​索引超出范围”。有什么明显我遗漏的建议吗?
    • 发生这种情况是因为您为组合框输入了错误的名称。因此,它无法在形状集合中找到。这种组合框通常被命名为“Drop Down 1”,值为 1,根据您在工作表中创建的形状数量而变化。
    • 如果您不确定名称,请尝试上面的这个测试子,找出工作表中现有形状的名称。
    • 这在上周表现出色,但现在无法将列表附加到组合框,尽管名称是正确的。有任何想法吗? ` list_val = Worksheets("首页").Shapes("Drop Down 3").ControlFormat.Value Sheets("首页").Range("K9") = Worksheets("pipe_totals").Cells((list_val + 1), 1) `
    • 到底出了什么问题?它是否显示任何错误?它没有做它应该做的事情,而是做其他事情?还是它什么都不做?
    【解决方案2】:

    据我了解,您希望每次组合框值更改时,单元格 K9 也将具有相同的值。那正确吗?如果是这种情况,请右键单击组合框并选择“分配宏”。然后选择“创建”。然后在创建的 sub 内部,应该是这样的:

    Sub "comboname"_Change()
    
    End Sub
    

    您还应该粘贴最后的代码行。

    .Range("k9").Value = Combo.Value
    

    这样做意味着您希望每次组合框值更改时都执行该行代码。

    【讨论】:

    • 是的,你明白我想说什么:)。我想在第一个实例中执行此操作,然后如果可行,我希望单元格 k9(或另一个单元格)对组合框中的值执行 vlookup。
    • 但是我收到“需要对象”错误。我需要将 Combo 定义为某种数据类型吗? @dimitris
    猜你喜欢
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多