1. 程式人生 > >Excel VBA ListBox列表框新增和刪除問題

Excel VBA ListBox列表框新增和刪除問題

        Excel VBA 窗體中有兩個ListBox,需要做的操作:從一個列表框中選擇列表值向另一個列表新增值,以及從已選擇的值中刪除選擇的列表值。

        例:ListBox列表 被選框lbData, 選擇框lbSelectedData,列表框中顯示三列。

'-------------------------------------------------------------------------
'將選中的備選科目加入到已選科目中
'內部變數說明:
'x 代表要迴圈的lbData行
'j 代表要向lbSelectedData插入的行
'i 代表lbSelect和lbData要操作的列
'程式設計思路:
'獲取lbSelectedData已有行數量賦值於j,要新增的行數為該值(因為行數從0開始)
'迴圈檢查lbData中選中的行
'在lbSelectedData中新增空行,行號為j
'將選中的記錄從0列開始將每一列賦值到新行中
'新增新記錄完成後,lbSelectedData可新增行行號加1
'
'操作完畢清空lbData框中的已選中的列,以免誤操作再次被新增
'--------------------------------------------------------------------------
Private Sub SelectListItem(isAll As Boolean)
    Dim j As Integer
   
    '獲取可新增行的行號
    j = lbSelectedData.ListCount
   
    '向已選科目列表中新增選擇的列
    '迴圈lbData每一行資料
    For x = 0 To lbData.ListCount - 1
       
        '判斷是否為全部新增(True),還是部分新增(False)
        If (isAll) Then
       
             '在lbSelectedData中新增新行,行號為獲取的可新增行行號
             lbSelectedData.AddItem , j
            
            '根據lbSelectedData中的列號,迴圈向新行中新增列值
            For i = 0 To lbData.ColumnCount - 1
                lbSelectedData.List(j, i) = lbData.List(x, i)
            Next i
              
            '可新增行行號加1
            j = j + 1

        Else
           
            '如果記錄被選中進行新增操作
            If lbData.Selected(x) = True Then
                           
                '在lbSelectedData中新增新行,行號為獲取的可新增行行號
                lbSelectedData.AddItem , j
                  
                '根據lbSelectedData中的列號,迴圈向新行中新增列值
                For i = 0 To lbData.ColumnCount - 1
                    lbSelectedData.List(j, i) = lbData.List(x, i)
                Next i
                  
                '可新增行行號加1
                j = j + 1

            End If
        End If
      
    Next x

    '清除備選表中的已選列
    For y = 0 To lbData.ListCount - 1
        lbData.Selected(y) = False
    Next
End Sub

如果要選擇備選全部列表值,可以將上述程式碼中“If lbData.Selected(x) = True Then”的條件判斷去掉即可。