Excel提供了下拉列表的實現,但並不支援多選,但是利用VBA程式設計可以實現多選的問題。
有Microsoft Excel物件:對應的是Sheet1或Sheet2對像等;
窗體:對應的是彈出的對話方塊;
模組:對應的是呼叫某些功能的入口。
以Sheet1頁單擊D列為例彈出框供多選
1:
先建立宏,然後編輯,在"Microsoft Excel物件"中單擊"Sheet2"的右鍵-》檢視程式碼
將此程式碼儲存:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) //說明:監聽sheet1發生的使用者操作事件
If ActiveCell.Column = 8 And ActiveCell.Row > 1 Then //說明:當前啟用列為J列,第二行以下
Call ShowFM2 //呼叫顯示窗體宏名
End If
End Sub
2:
在工程資源-》"模組"物件 中 “插入模組”-》檢視程式碼
儲存如下程式碼:
Sub ShowFM()
UserForm1.Show
3:
在工程資源->"窗體"->插入"使用者窗體"
將以下程式碼儲存:
Private Sub CommandButton1_Click()
Dim Arr(), k&, i&
ReDim Arr(1 To 1)
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
k = k + 1
ReDim Preserve Arr(1 To k)
"Arr(k) = .List(i, 1)
Arr(k) = Sheet2.Range("A" & (i + 1)).Value //獲取Sheet2列表中A列i+1行的值
Next i
End With
"MsgBox "您選擇了:" & Join(Arr, ",")
UserForm1.Hide
"Application.ActiveSheet.Range("A1").Value = Join(Arr, ",")
Application.ActiveCell.Value = Join(Arr, ",") //將值放入到當前單元格
Private Sub ListBox1_Click()
Private Sub TextBox1_Change()
Private Sub UserForm_Initialize()
With UserForm1.ListBox1
.ColumnCount = 1 "設定列數
.ColumnHeads = False "設定列標題。標題為資料區域的上一行
.BoundColumn = 2
.MultiSelect = fmMultiSelectMulti "按空格鍵或單擊滑鼠以選定列表中一個條目或取消選定。
" .MultiSelect = fmMultiSelectExtended "按 Shift 並單擊滑鼠,或按 Shift 的同時按一個方向鍵,將所選條目由前一項擴充套件到當前項。按 Ctrl 的同時單擊滑鼠可選定或取消選定。
" .MultiSelect = fmMultiSelectSingle "只可選擇一個條目(預設)。
本文來自知乎Gauin李紅濤。
Excel提供了下拉列表的實現,但並不支援多選,但是利用VBA程式設計可以實現多選的問題。
有Microsoft Excel物件:對應的是Sheet1或Sheet2對像等;
窗體:對應的是彈出的對話方塊;
模組:對應的是呼叫某些功能的入口。
以Sheet1頁單擊D列為例彈出框供多選
1:
先建立宏,然後編輯,在"Microsoft Excel物件"中單擊"Sheet2"的右鍵-》檢視程式碼
將此程式碼儲存:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) //說明:監聽sheet1發生的使用者操作事件
If ActiveCell.Column = 8 And ActiveCell.Row > 1 Then //說明:當前啟用列為J列,第二行以下
Call ShowFM2 //呼叫顯示窗體宏名
End If
End Sub
2:
在工程資源-》"模組"物件 中 “插入模組”-》檢視程式碼
儲存如下程式碼:
Sub ShowFM()
UserForm1.Show
End Sub
3:
在工程資源->"窗體"->插入"使用者窗體"
將以下程式碼儲存:
Private Sub CommandButton1_Click()
Dim Arr(), k&, i&
ReDim Arr(1 To 1)
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
k = k + 1
ReDim Preserve Arr(1 To k)
"Arr(k) = .List(i, 1)
Arr(k) = Sheet2.Range("A" & (i + 1)).Value //獲取Sheet2列表中A列i+1行的值
End If
Next i
End With
"MsgBox "您選擇了:" & Join(Arr, ",")
UserForm1.Hide
"Application.ActiveSheet.Range("A1").Value = Join(Arr, ",")
Application.ActiveCell.Value = Join(Arr, ",") //將值放入到當前單元格
End Sub
Private Sub ListBox1_Click()
End Sub
Private Sub TextBox1_Change()
End Sub
Private Sub UserForm_Initialize()
With UserForm1.ListBox1
.ColumnCount = 1 "設定列數
.ColumnHeads = False "設定列標題。標題為資料區域的上一行
.BoundColumn = 2
.MultiSelect = fmMultiSelectMulti "按空格鍵或單擊滑鼠以選定列表中一個條目或取消選定。
" .MultiSelect = fmMultiSelectExtended "按 Shift 並單擊滑鼠,或按 Shift 的同時按一個方向鍵,將所選條目由前一項擴充套件到當前項。按 Ctrl 的同時單擊滑鼠可選定或取消選定。
" .MultiSelect = fmMultiSelectSingle "只可選擇一個條目(預設)。
End With
End Sub
本文來自知乎Gauin李紅濤。