怎么制作可以多項(xiàng)選擇的下拉菜單?
發(fā)布時(shí)間:2022-11-01 09:09 [ 我要自學(xué)網(wǎng)原創(chuàng) ] 發(fā)布人: 小劉2175 閱讀: 1645

今天給大家分享的表格小技巧是:如何制作顯示多列同時(shí)可以選擇多項(xiàng)的下拉菜單?
比如下圖,顯示三列下拉菜單,可以選擇任意多個(gè)項(xiàng)目合并到一個(gè)單元格……



首先,咱們得有個(gè)數(shù)據(jù)表,用來填充選項(xiàng)菜單的數(shù)據(jù)。嗯,我們把這份工作表命名為“參數(shù)表”,數(shù)據(jù)如下圖所示。A列是商品代碼,B列是商品,C列是負(fù)責(zé)人。



然后,我們?cè)谛枰谱鬟x項(xiàng)菜單的工作表放一個(gè)列表框控件。
在【開發(fā)工具】選項(xiàng)卡下單擊【插入】按鈕,在彈出來的選項(xiàng)菜單中選擇ActiveX控件列表框,畫在當(dāng)前工作表。位置隨便,大小不論,丑美無關(guān)……畢竟這些你說了都不算,待會(huì)代碼會(huì)重置。



需要說明的是,如果這是你在當(dāng)前工作簿放置的第1個(gè)列表框控件,它會(huì)被系統(tǒng)默認(rèn)名稱為ListBox1。名字很重要,名字取不好,老婆娶不到,還記得你那個(gè)名字叫楊偉的同學(xué)嗎?——下面的代碼,我們都是通過名字來控制控件的一生的。
最后退出設(shè)計(jì)模式,也就是點(diǎn)擊【開發(fā)工具】選項(xiàng)卡下的【設(shè)計(jì)模式】按鈕。



OK,最后把以下代碼復(fù)制粘貼到目標(biāo)工作表的VBE編輯窗口即可。比如我們這里是粘貼到名稱為“入庫單”工作表。



代碼如下:

復(fù)制
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column <> 2 Or Target.Row < 4 Then ListBox1.Visible = False: Exit Sub
    '如果選中的單元格不是第2列,或者小于4行,也就是不在目標(biāo)范圍內(nèi),則退出程序
    If Target.Columns.Count > 1 Or Target.Rows.Count > 1 Then ListBox1.Visible = False: Exit Sub
    '如果選中的單元格大于1個(gè),則退出程序
    With Sheets("參數(shù)表")
        r = .Range("a1:c" & .Cells(Rows.Count, "a").End(xlUp).Row).Value
    End With
    With ListBox1
        '調(diào)整位置到單元格處
        .Top = Target.Top 'listbox的頂端位置
        .Left = Target.Left + Target.Width 'listbox的左端位置
        .Width = 250 '寬度
        .Height = 150 '高度
        .Visible = True '可見
        '.ColumnHeads = True '顯示標(biāo)題行
        .ColumnCount = 3 '三列
        .ColumnWidths = "50;120;50" '設(shè)置第一列寬度50第二列寬度120……
        .List = r '數(shù)據(jù)來源
        .MultiSelect = fmMultiSelectMulti '允許通過鼠標(biāo)點(diǎn)擊的方式進(jìn)行多選
        .ListStyle = fmListStyleOption '選項(xiàng)按鈕設(shè)置為方形
    End With
End Sub

Private Sub ListBox1_Change()
    Dim i As Long, strMy As String
    With ListBox1
        If .Selected(0) = True Then .Selected(0) = False
        '如果用戶選取的是標(biāo)題行那么撤銷選取
        For i = 1 To .ListCount - 1
        '遍歷listbox的記錄,如果被選中則按換行符合并
            If .Selected(i) = True Then
                strMy = strMy & vbCrLf & .List(i, 1)
                '取list的第二列
                '無論列還是行的索引都是從0開始的,因此第二列為1
            End If
        Next
    End With
    ActiveCell.Value = Mid(strMy, 3)
    '數(shù)據(jù)寫入單元格
End Sub

代碼有兩個(gè)部分組成。

一部分是工作表的Worksheet_SelectionChange事件。當(dāng)用戶選擇目標(biāo)范圍內(nèi)的單元格時(shí),顯示設(shè)置列表框的位置、大小和數(shù)據(jù)。

本例中列表框只出現(xiàn)在B列,且行數(shù)大于3的情況下。這個(gè)可以根據(jù)實(shí)際情況,自己進(jìn)行修改。
另一部分是列表框的ListBox1_Change事件,當(dāng)用戶選擇列表框的數(shù)據(jù)時(shí),將數(shù)據(jù)寫入單元格。

Excel2019視頻教程
我要自學(xué)網(wǎng)商城 ¥80 元
進(jìn)入購買
文章評(píng)論
0 條評(píng)論 按熱度排序 按時(shí)間排序 /350
添加表情
遵守中華人民共和國的各項(xiàng)道德法規(guī),
承擔(dān)因您的行為而導(dǎo)致的法律責(zé)任,
本站有權(quán)保留或刪除有爭(zhēng)議評(píng)論。
參與本評(píng)論即表明您已經(jīng)閱讀并接受
上述條款。
V
特惠充值
聯(lián)系客服
APP下載
官方微信
返回頂部
分類選擇:
電腦辦公 平面設(shè)計(jì) 室內(nèi)設(shè)計(jì) 室外設(shè)計(jì) 機(jī)械設(shè)計(jì) 工業(yè)自動(dòng)化 影視動(dòng)畫 程序開發(fā) 網(wǎng)頁設(shè)計(jì) 會(huì)計(jì)課程 興趣成長 AIGC