excel - VBA Excel - 使用 AddItem 时将标题添加到组合框

标签 excel vba combobox header

我有一个列表,其中包含我想添加到用户表单中的组合框的值。

我想要的值位于 A 列和 Z 列(因此来自 2 列的值)。我设法使用 AddItem 函数添加值,但很难向下拉列表中添加标题(一些帖子说这是不可能的)。

作为替代方案,我看到了 ListFillRange,但我无法弄清楚这是否可以用于彼此不相邻的两列。 感谢您的帮助。

最佳答案

a few posts said this is not possible

我通常不会回答那些没有表现出任何努力的问题,但这是一个有趣的问题。我倾向于同意你的观点,很多人认为你不能ComboBox中显示标题。

但是可以Combobox中显示标题。这是一个演示。如果您不想想要更改原始工作表,您当然必须借助辅助工作表。

测试用例

在我们的演示中,我们将采用 2 个非连续范围 A1-A5D1-A5

enter image description here

逻辑

  1. 您要将相关数据复制到新工作表中。
  2. 将范围转换为表格
  3. 将组合框的列标题设置为 true
  4. 将行源设置为帮助表中的相关表格范围。

代码

Option Explicit

Dim ws As Worksheet

Private Sub UserForm_Initialize()
    Dim wsInput As Worksheet
    
    '~~> Input sheet. Change as applicable
    Set wsInput = Sheet1
    
    '~~> Add a new sheet. Hide it (Optional)
    Set ws = ThisWorkbook.Sheets.Add
    ws.Visible = xlSheetHidden
    
    '~~> Copy the non-contigous range to the new sheet
    wsInput.Range("A1:A5").Copy ws.Range("A1")
    wsInput.Range("D1:D5").Copy ws.Range("B1")
    
    Dim rng As Range
    
    '~~> Get your range
    Set rng = ws.Range("A1:B5")
    
    '~~> Convert range to table
    ws.ListObjects.Add(xlSrcRange, rng, , xlYes).Name = "MyTable"
    
    '~~> Few combobox settings and we are done
    With ComboBox1
        .ColumnCount = 2
        .ColumnHeads = True
        .RowSource = "MyTable"
    End With
End Sub

'~~> Delete the temp sheet we created
Private Sub UserForm_Terminate()
    Application.DisplayAlerts = False
    If Not ws Is Nothing Then ws.Delete
    Application.DisplayAlerts = True
End Sub

输出

enter image description here

替代方案

如果您不同意辅助表的想法并且可以牺牲标题部分,那么您可以使用非连续范围填充组合框。请参阅Excel VBA Multicolumn Listbox add non contiguous range 。当然,您必须编辑代码以满足您的需求。由于只有两列,因此最终的数组将类似于 Dim Ar(1 To LastRow, 1 To 2)。该数组将保存两列中的值。

关于excel - VBA Excel - 使用 AddItem 时将标题添加到组合框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67249418/

相关文章:

C# Combo box value change,我应该使用什么Event来编写更新注册表?

java - 如何为数组列表中的变量分配名称?

vba - 在宏结束之前运行 Sub,如 Finally block

sqlite - 如何在VBA Excel中将Twitter API时间戳转换为Unix时间

excel - 无法设置两个工作表VBA的范围

wpf - 在 Josh Smith 的文章之后,在 MVVM 的 ListView 中添加 ComboBox

excel - 如何用VBA在Excel指定单元格位置插入图片

excel - PowerBI:如何计算矩阵中两列之间的差异

python - pandas在Excel writer中设置单元格格式

c# - Datagridview 组合框列不会下拉(C#)