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