Excel 在操作和重新添加项后重新选择listbox用户表单中的项

Excel 在操作和重新添加项后重新选择listbox用户表单中的项,excel,userform,listboxitem,vba,Excel,Userform,Listboxitem,Vba,代码的第一位引用顺序,然后使用列表框中显示的新顺序刷新列表 列表框当前设置为“单一”,但我希望它被设置为“fmMultiSelectMulti”。通过一个“Multi”,我可以通过公共函数调用getSelectedIndex(userformNameHere)以字符串的形式收集所选索引号。(即“0,4,7,8,9…”) 我的问题是,一旦我剪切并粘贴了列表框中的某些行,我希望能够向用户显示,它们在所选的列表框中仍然具有相同的值 Public Function GetSelectedIndexes(

代码的第一位引用顺序,然后使用列表框中显示的新顺序刷新列表

列表框当前设置为“单一”,但我希望它被设置为“fmMultiSelectMulti”。通过一个“Multi”,我可以通过公共函数调用getSelectedIndex(userformNameHere)以字符串的形式收集所选索引号。(即“0,4,7,8,9…”)

我的问题是,一旦我剪切并粘贴了列表框中的某些行,我希望能够向用户显示,它们在所选的列表框中仍然具有相同的值

Public Function GetSelectedIndexes(lBox As MSForms.ListBox) As String
'returns an array of selected index numbers in a listbox
Dim tmparray() As Variant
Dim i As Integer
Dim selCount As Integer
selCount = -1
'## Iterate over each item in the ListBox control:
For i = 0 To lBox.ListCount - 1
    '## Check to see if this item is selected:
    If lBox.Selected(i) = True Then
        '## If this item is selected, then add it to the array
        selCount = selCount + 1
        ReDim Preserve tmparray(selCount)
        tmparray(selCount) = lBox.ListIndex
    End If
Next

If selCount = -1 Then
    '## If no items were selected, return an empty string
    GetSelectedIndexes = "" ' or "No items selected", etc.
Else:
    '## Otherwise, return the array of items as a string,
    '   delimited by commas
    GetSelectedIndexes = Join(tmparray, ", ")
End If
End Function
下面是我的代码的其余部分,它与单值可选列表框一起工作:

Private Sub SpinButton1_SpinUp()
' cuts + moves UP one cell...     ONLY WORKS IF FmMultiSelectSingle... 
ThisWorkbook.Sheets("mon").Activate

If Not MonMissions2.ListIndex < 1 Then
    selRow = MonMissions2.ListIndex + 2
    Range("B" & selRow).EntireRow.Select
    Selection.Cut
    Selection.Offset(-1, 0).Insert Shift:=xlDown

'Reloads wing priorities list
MonMissions2.Clear
With MonMissions2
    List = Range("A2:A500").Value
        For i = 1 To UBound(List, 1)
            If Len(Trim(List(i, 1))) > 0 Then
                .AddItem Range("B" & i + 1).Value & "-" & Range("C" & i + 1).Value & "-" & Range("D" & i + 1).Value  ' populate the listbox
            End If
        Next i



    MonMissions2.ListIndex = selRow - 3
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Need to re-select previously selected ListIndex HERE
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''
End With

End If

End Sub
私有子自旋按钮1\u自旋上升()
'剪切+向上移动一个单元格。。。仅当FmMultiSelectSingle。。。
此工作簿。工作表(“周一”)。激活
如果不是MonMissions2.ListIndex<1,则
selRow=MonMissions2.ListIndex+2
范围(“B”和selRow)。EntireRow.Select
选择,剪
选择。偏移(-1,0)。插入移位:=xlDown
'重新加载机翼优先级列表
星期一任务2,完毕
带着任务2
列表=范围(“A2:A500”)。值
对于i=1到uBond(列表,1)
如果Len(Trim(List(i,1)))>0,则
.AddItem范围(“B”&i+1)。值和“-”范围(“C”&i+1)。值和“-”范围(“D”&i+1)。值填充列表框
如果结束
接下来我
MonMissions2.ListIndex=selRow-3
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'需要在此处重新选择以前选择的ListIndex
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
以
如果结束
端接头

我是否必须为我的动态列表框项目创建100多个变量,以确定是否选择了它们作为开始?(listbox.selected(I)=true…

您是否考虑过在列表框中使用多个列,一个显示,另一个隐藏?您可以在排序之前将
Selected
状态写入一个隐藏列,然后从该列中检索原始设置。我想我的问题是在这种情况下,列表框中的单词是由不同列的字符串组合而成的,这些字符串由破折号分隔。我仍然可以简单地将行1-100+的整个列保存为true或false(表示选择了哪些项),然后在重新填充时引用与true-false相同的列列表?这就是我的意思。在多列列表框中,有一些项,如
ListBox1.Columns(1)
ListBox1.column(2)
等,都是指当前选定的项,由
ListBox1.Listindex
标识。假定列1是绑定列,列表框的
等于
ListBox1。列(1)
。因此,如果在排序前将项目的
Selected
属性写入列(2),则
ListBox1.Selected(n)=
ListBox1.Column(2,n)`将在排序后重新建立以前的选择。