【问题标题】:Excel output list of variables based on drop down menu基于下拉菜单的Excel输出变量列表
【发布时间】:2014-04-11 17:39:33
【问题描述】:

我对 VBA 很陌生,所以希望这不是一个太复杂的问题。 我想要的是在一张纸(比如 sheet1 A1)的单元格中有一个下拉列表(我知道该怎么做),然后根据选择的内容,下面的单元格将根据另一个表格中的表格填充床单。

例如,列表中的某些选项可能是“North”“West”等,如果选择“West”,Sheet2 中标记为“West”的所有站点都将在 sheet1 A2、A3 等中返回其站点编号.(如果可能的话,也可能是 B2、B3 中的站点名称)

例如 sheet1:

西

28 60
61
68
87

这有点复杂,因为我的下拉列表不会全部基于区域,而是基于 Sheet2 中的一系列列,例如站点类型、站点状态等。

然后在另一个宏中引用 A 列 - 但目前必须手动更新,所以我希望能够基于变量获取列表,但如果不是,则剪切(/删除)一些值必需的。

此工作表需要完全没有 VBA 知识的人可以操作 - 我打算隐藏更复杂的工作表,以免造成额外的混乱。

谢谢

【问题讨论】:

    标签: excel list vba


    【解决方案1】:

    首先,我使用带名称的范围来减少对数据长度的检查。
    写入数据的范围称为“WriteData”。
    您在 DropDown 中写入列表的范围称为“DropDown”。最终这些数据可以在以后自动填充。
    获取数据的范围称为“数据”
    我已经把所有东西都放在一张纸上,但都是一样的......
    组合框在单元格“B5”中写入选择并填充范围“DropDown”。
    代码是:

    Dim Start As Integer
    Dim Row As Boolean
    Dim FoundC As Boolean
    Start = Range("WriteData").Row
    Row = False
    FoundC = False
    Range("WriteData").Value = ""
    For Each xx In Range("Dati")
        If xx.Value = "" Then Exit For
        If Row = False Then
            Row = True
            If xx.Value = Range("B5").Value Then
                FoundC = True
                Cells(Start, 2).Value = xx.Value
            End If
        Else
            Row = False
            If FoundC Then
                Cells(Start, 3).Value = xx.Value
                FoundC = False
                Start = Start + 1
            End If
        End If
    Next
    

    是否在 ComboBox 事件 Change 中插入。

    我将代码添加到自动过滤“Dati”范围内所有数据的组合框。

    Range("DropDown").ClearContents
    Range("Key").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("DropDown"), Unique:=True
    

    名为“Key”的范围是“Dati”内的列,其中包含您想要的键(“West”...)

    【讨论】:

    • 嗨,谢谢,我不得不改变一些东西才能让它工作,但它确实帮助我摆脱了困境。我不确定 if 语句的 else 部分的意义是什么?我还必须删除“If xx.Value =”“Then Exit For”,因为我的数据有一些空白并进行了一些其他更改。但是感谢它给了我一个起点的帮助:)