Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Изменение индекса списка в коде. Зачем? - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Изменение индекса списка в коде. Зачем? (Макросы/Sub)
Изменение индекса списка в коде. Зачем?
t330 Дата: Пятница, 15.03.2019, 14:39 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 0 ±
Замечаний: 20% ±

Excel 2016
Всем привет!

В коде перемещения ключей скиска (из Уокенбаха) есть строка (самая последняя) под названием "Изменения индекса списка"
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]
К сообщению приложен файл: 0984543.xlsm (19.0 Kb)


Сообщение отредактировал t330 - Пятница, 15.03.2019, 14:39
 
Ответить
СообщениеВсем привет!

В коде перемещения ключей скиска (из Уокенбаха) есть строка (самая последняя) под названием "Изменения индекса списка"
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]

Автор - t330
Дата добавления - 15.03.2019 в 14:39
_Boroda_ Дата: Пятница, 15.03.2019, 15:13 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Фактически это выделение той строчки, которая уже выделена и без того. Возможно это наследство старых версий Excel. Если не забуду, дома на 2000 Excel посмотрю


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеФактически это выделение той строчки, которая уже выделена и без того. Возможно это наследство старых версий Excel. Если не забуду, дома на 2000 Excel посмотрю

Автор - _Boroda_
Дата добавления - 15.03.2019 в 15:13
krosav4ig Дата: Пятница, 15.03.2019, 16:21 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
а можно я немного поумничаю?
в коде формы
[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

Private Sub OKButton_Click()
    Unload Me
End Sub
[/vba]в Module1 [vba]
Код
Sub ShowDialog()
    UserForm1.Show
End Sub
[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениеа можно я немного поумничаю?
в коде формы
[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

Private Sub OKButton_Click()
    Unload Me
End Sub
[/vba]в Module1 [vba]
Код
Sub ShowDialog()
    UserForm1.Show
End Sub
[/vba]

Автор - krosav4ig
Дата добавления - 15.03.2019 в 16:21
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Изменение индекса списка в коде. Зачем? (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!