回覆列表
  • 1 # Excel職場一哥

    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李紅濤。

  • 中秋節和大豐收的關聯?
  • 怎樣求婚有創意?怎麼不讓求婚落入俗套?