簡體   English   中英

Excel組合框不合並兩列中的條目,但將它們列為兩個單獨的條目

[英]Excel combo box not merging entries from two columns but listing them as two seperate entries

我有下拉要求從lookupDept工作簿上的兩列中提取信息並合並。 比如我有:

deptCode deptName
BS       Business School
CD       Design and Technology
CG       Chemical Engineering
CM       Chemistry
CO       Computer Science

我已經設法解決了從兩個用於組合框的spead-sheet列中提取信息的問題。 但不幸的是,組合框列表現在看起來像這樣:

BS
CD
CG
CM
Business School
Design and Technology
Chemical Engineering
Chemistry

當我希望它看起來像這樣:

BS Business School
CD Design and Technology
CG Chemical Engineering
CM Chemistry

這需要合並兩列信息(列已命名為deptCodedeptName ),但我不太清楚如何完成它。 這是我到目前為止所嘗試的,代碼列出了來自兩列的信息而不是合並它們:

Private Sub UserForm_Initialize()

Dim c_deptCode As Range
Dim c_deptName As Range
Dim ws_dept As Worksheet
Set ws_dept = Worksheets("lookupDept")

For Each c_deptCode In ws_dept.Range("deptCode")
  With Me.cbo_deptCode
    .AddItem c_deptCode.Value
    .List(.ListCount - 1, 1) = c_deptCode.Offset(0, 1).Value
  End With
Next c_deptCode

For Each c_deptName In ws_dept.Range("deptName")
  With Me.cbo_deptCode
    .AddItem c_deptName.Value
  End With
Next c_deptName

End Sub

看起來主要的問題是你要將第二個范圍與第一個范圍完全分開(我知道這是你的問題,所以我會道歉指出明顯的:))。 在任何情況下,您可以執行的操作類似於以下內容 - 基本上組合兩個范圍中的值,然后將該單個值添加到下拉列表中。 主要的變化是添加兩個新變量(表示包含命名范圍值的數組)並將For循環壓縮為一個。

Private Sub UserForm_Initialize()

Dim c_deptCode As Range
Dim c_deptName As Range
Dim deptCodes As Variant
Dim deptNames As Variant

Dim ws_dept As Worksheet
Set ws_dept = Worksheets("lookupDept")

' Assign each range to an array containing the values
deptCodes = Choose(1, ws_dept.Range("deptCode"))
deptNames = Choose(1, ws_dept.Range("deptName"))

' Note that this blindly uses deptCode as a sort of control.
' This could be handled a bit better, but should work for this case
For i = 1 To ws_dept.Range("deptCode").Rows.Count
  ' Create the combined name (code + space + name)
  CombinedName = deptCodes(i, 1) & " " & deptNames(i, 1)
  cbo_deptCode.AddItem CombinedName
Next i

End Sub

將組合框的ColumnCount屬性設置為2 ,並將數據作為二維數組加載到List屬性中

您還可以使用ColumnWidths設置列寬以適應

Private Sub UserForm_Initialize()
    Dim c_deptCode As Range
    Dim c_deptName As Range
    Dim ws_dept As Worksheet

    Dim aDat() As Variant
    Dim i As Long

    Set ws_dept = Worksheets("lookupDept")
    Set c_deptCode = ws_dept.Range("deptCode")
    Set c_deptName = ws_dept.Range("deptName")
    aDat = c_deptCode
    ReDim Preserve aDat(1 To UBound(aDat, 1), 1 To 2)
    For i = 1 To UBound(aDat, 1)
        aDat(i, 2) = c_deptName.Cells(i, 1)
    Next
    With cbo_deptCode
        .ColumnCount = 2
        .ColumnWidths = "20;50"
        .List = aDat
    End With
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM