В коде перемещения ключей скиска (из Уокенбаха) есть строка (самая последняя) под названием "Изменения индекса списка" ListBox1.ListIndex = ItemNum - 1
Если ее закомментировать, то все работает и без нее. Зачем нужно менять этот индекс списка?
[vba]
Код
Private Sub MoveUpButton_Click() Dim NumItems As Integer Dim i As Integer Dim ItemNum As Integer Dim TempItem As String Dim TempList()
If ListBox1.ListIndex = 0 Then Exit Sub
NumItems = ListBox1.ListCount ReDim TempList(0 To NumItems - 1)
' Заполнение массива элементами списка For i = 0 To NumItems - 1 TempList(i) = ListBox1.List(i) Next i
' Выбранный элемент ItemNum = ListBox1.ListIndex
' Обмен элементами TempItem = TempList(ItemNum) TempList(ItemNum) = TempList(ItemNum - 1) TempList(ItemNum - 1) = TempItem ListBox1.List = TempList
' Изменение индекса списка ListBox1.ListIndex = ItemNum - 1
End Sub
[/vba]
Всем привет!
В коде перемещения ключей скиска (из Уокенбаха) есть строка (самая последняя) под названием "Изменения индекса списка" ListBox1.ListIndex = ItemNum - 1
Если ее закомментировать, то все работает и без нее. Зачем нужно менять этот индекс списка?
[vba]
Код
Private Sub MoveUpButton_Click() Dim NumItems As Integer Dim i As Integer Dim ItemNum As Integer Dim TempItem As String Dim TempList()
If ListBox1.ListIndex = 0 Then Exit Sub
NumItems = ListBox1.ListCount ReDim TempList(0 To NumItems - 1)
' Заполнение массива элементами списка For i = 0 To NumItems - 1 TempList(i) = ListBox1.List(i) Next i
' Выбранный элемент ItemNum = ListBox1.ListIndex
' Обмен элементами TempItem = TempList(ItemNum) TempList(ItemNum) = TempList(ItemNum - 1) TempList(ItemNum - 1) = TempItem ListBox1.List = TempList
' Изменение индекса списка ListBox1.ListIndex = ItemNum - 1
Фактически это выделение той строчки, которая уже выделена и без того. Возможно это наследство старых версий Excel. Если не забуду, дома на 2000 Excel посмотрю
Фактически это выделение той строчки, которая уже выделена и без того. Возможно это наследство старых версий Excel. Если не забуду, дома на 2000 Excel посмотрю_Boroda_
Option Explicit Private Sub MoveUpButton_DblClick(ByVal Cancel As MSForms.ReturnBoolean) TextBox1.Text = "Произведен двойной щелчок" Cancel = False Call MoveUpButton_Click End Sub Private Sub MoveDownButton_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Cancel = False Call MoveDownButton_Click End Sub
Private Sub MoveUpButton_Click() ShiftItem ListBox1, True End Sub Private Sub MoveDownButton_Click() ShiftItem ListBox1, False End Sub
Private Sub ShiftItem(ByRef lb As MSForms.Control, bUp As Boolean) Dim i%, j%, l() With lb i = .ListIndex If i + bUp >= 0 And i + bUp < lb.ListCount - 1 Then l = .List For j = 0 To UBound(l, 2) swap l(i, j), l(i + (1 Or bUp), j): Next .List = l End If End With End Sub Private Sub swap(ByRef a, ByRef b) Dim c: c = a: a = b: b = c End Sub
Private Sub UserForm_Initialize() With ListBox1 .List = [transpose(proper(text(row(r1:r12)*30,"[$-419]mmmm")))] .ListIndex = 0 End With End Sub
Private Sub OKButton_Click() Unload Me End Sub
[/vba]в Module1 [vba]
Код
Sub ShowDialog() UserForm1.Show End Sub
[/vba]
а можно я немного поумничаю? в коде формы [vba]
Код
Option Explicit Private Sub MoveUpButton_DblClick(ByVal Cancel As MSForms.ReturnBoolean) TextBox1.Text = "Произведен двойной щелчок" Cancel = False Call MoveUpButton_Click End Sub Private Sub MoveDownButton_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Cancel = False Call MoveDownButton_Click End Sub
Private Sub MoveUpButton_Click() ShiftItem ListBox1, True End Sub Private Sub MoveDownButton_Click() ShiftItem ListBox1, False End Sub
Private Sub ShiftItem(ByRef lb As MSForms.Control, bUp As Boolean) Dim i%, j%, l() With lb i = .ListIndex If i + bUp >= 0 And i + bUp < lb.ListCount - 1 Then l = .List For j = 0 To UBound(l, 2) swap l(i, j), l(i + (1 Or bUp), j): Next .List = l End If End With End Sub Private Sub swap(ByRef a, ByRef b) Dim c: c = a: a = b: b = c End Sub
Private Sub UserForm_Initialize() With ListBox1 .List = [transpose(proper(text(row(r1:r12)*30,"[$-419]mmmm")))] .ListIndex = 0 End With End Sub