【已解決】如何做excel表的下拉框多選
阿新 • • 發佈:2018-11-16
最近因為專案需求,要製作一個excel匯入的模板,模板中要求某幾列的下拉框是多選的。。不得不臨時研究了一下vba。其間各種心酸不多說。。。。。。
首先,這個是需要啟用巨集,在vb編輯器裡寫程式碼,所以你要確保你的excel是可以啟用巨集的。如果是正式版的office是可以直接用(破解版就不知道了)。我用的是wps。需要裝個外掛(網上可下載)
完成效果是這樣的:可多選,不可重複。
第一步:在excel中加入ListBox控制元件,
第二步,在【設計模式】下右擊控制元件,給控制元件註明相關屬性,注意標紅的三處。其中ListFillRange引數意為該listBox列表的值取自名為date的sheet的第一列(A列)中的1~3行。
第三步:雙擊該控制元件,進入編碼區:注意【2】處,vb的方法名是生成的,例如需要選擇【listBox1】再選擇【change】會自動生成ListBox1_Change()這個方法,而不是寫出來的。。。(做java的表示在這裡卡了很久)
下面貼上Sheet1(Sheet1)中的程式碼:
Private Sub ListBox1_Change() If ReLoad Then Exit Sub '見下方說明 For i = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(i) = True Then t = t & "," & ListBox1.List(i) Next ActiveCell = Mid(t, 2) End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If ActiveCell.Column = 3 And ActiveCell.Row > 1 Then t = ActiveCell.Value ReLoad = True '如果是根據單元格的值修改列表框,則暫時遮蔽listbox的change事件。 With ListBox1 For i = 0 To .ListCount - 1 '根據活動單元格內容修改列表框中被選中的內容 If InStr(t, .List(i)) Then .Selected(i) = True Else .Selected(i) = False End If Next ReLoad = False .Top = ActiveCell.Top + ActiveCell.Height '以下語句根據活動單元格位置顯示列表框 .Left = ActiveCell.Left .Width = ActiveCell.Width .Visible = True End With Else ListBox1.Visible = False End If End Sub
Sheet2(date)中的程式碼:
Private Sub Worksheet_Change1(ByVal Target As Range)
Sheets("Sheet1").ListBox1.ListFillRange = "data!a1:a" & Cells(1, 1).End(xlDown).Row
End Sub
模組1中的程式碼:
Public ReLoad As Boolean '開關listbox的change事件
模組2中的程式碼:
Option Explicit Sub ShowFM() UserForm1.Show End Sub
這個適合vb小白急需完成功能參考,讓大神見笑了。