Excel VBA 用组合框替换数据验证列表

威美亚

我有一个包含四个数据验证下拉列表的工作表。我想用四个依赖/级联组合框替换这四个数据验证下拉列表。我不想使用用户表单!

我在我的工作表中使用了一个组合框,我认为它只接受垂直列表。在这个线程中可能有一个解决方法:Excel VBA:为什么组合框只显示列表中的一个项目?

我还希望我的组合框是依赖/级联的。在此线程中,VBA 中可能有一个解决方案:How to list combo box data based on another combo box entry

此外,我正在使用四个数据验证下拉列表的单元格范围/地址来执行 vlookup。如何在 vlookup 公式中引用一个/两个/三个/四个组合框?

我需要以下方面的帮助:

  1. 从一个水平列表创建两个组合框。
  2. 从水平列表中的前两个组合框的选择中创建两个相关组合框。

  3. 在多个 vlookups 公式中引用四个组合框的四个值。假设我在组合框中选择瑞典,我想在我的查找公式中使用瑞典的值。我不确定组合框是如何工作的,我一边打字一边阅读它们。这个网页是一个好的开始:https : //support.office.com/en-us/article/add-a-list-box-or-combo-box-to-a-worksheet-in-excel-579e1958-f7f6 -41ae-ba0c-c83cc6e40878在这个 youtube 视频中,索引公式用于查找组合框的值:https : //www.youtube.com/watch? v=VXlKM3YaWag

  4. 对填充组合框的列表进行排序。此线程有助于按多个条件排序:Excel VBA Multi line sort by multiple criteria in Excel 2016

锡人

按住Ctrl+t将您的列表范围转换为表格。此代码适用于 ActiveX ComboBox 或 ListBox。MsFormsListName 是具有控件的工作表的名称。该表可以位于调用子例程的工作簿中的任何位置。

在此处输入图片说明


Sub Test()
    AddTableRowAsListColumn "Table2", "ComboBox1", "Sheet2", 1
    AddTableRowAsListColumn "Table2", "ListBox1", "Sheet2", 1
End Sub

Sub AddTableRowAsListColumn(TableName As String, MsFormsListName As String, MsFormsListWorksheetName As String, RowIndex As Long)
    Dim MsFormsList As OLEObject
    On Error Resume Next
    Set MsFormsList = Worksheets(MsFormsListWorksheetName).OLEObjects(MsFormsListName)
    On Error GoTo 0

    If MsFormsList Is Nothing Then
        MsgBox MsFormsListName & " not found on " & MsFormsListWorksheetName
        Exit Sub
    End If

    MsFormsList.Object.list = WorksheetFunction.Transpose(Range(TableName).Rows(RowIndex).Value)
End Sub

Sub AddTableColumnToList(TableName As String, MsFormsListName As String, MsFormsListWorksheetName As String, ColumnIndex As Long)
    Dim MsFormsList As OLEObject
    On Error Resume Next
    Set MsFormsList = Worksheets(MsFormsListWorksheetName).OLEObjects(MsFormsListName)
    On Error GoTo 0

    If MsFormsList Is Nothing Then
        MsgBox MsFormsListName & " not found on " & MsFormsListWorksheetName
        Exit Sub
    End If

    MsFormsList.Object.list = Range(TableName).Columns(ColumnIndex).Value
End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章