Основы офисного программирования и язык VBA


Еще раз о "переиспользовании" модулей - часть 4


Но, обратите внимание на главное в этом примере. Для удобства пользователя ему предоставлены три разных способа передачи данных из одного списка в другой. Поскольку обмен данными может вестись в двух направлениях, то при лобовом программировании нужно было бы написать 6 различных макросов. Мы же свели задачу к двум процедурам, вызываемых с разными значениями параметров. Тексты этих процедур мы поместили в стандартный модуль с именем ToolsMod, предполагая возможность его дальнейшего использования. Вот эти тексты:

Option Explicit Public Sub MoveSelectedItems(ByVal n As Byte, ByVal ListBox1 As Object, _ ByVal ListBox2 As Object) 'Перемещает выделенные элементы первого списка в конец второго 'с одновременным удалением данных из первого списка. 'Оба списка имеют n столбцов.

Dim RowIndex1 As Byte, RowIndex2 As Byte, i As Byte, j As Byte

'Выборочный обмен данными между списками: ListBox1 -> ListBox2 With ListBox1 RowIndex2 = ListBox2.ListCount RowIndex1 = 0 For i = 0 To .ListCount - 1 If .Selected(RowIndex1) Then 'Создается элемент нового списка и заполняется его первый столбец ListBox2.AddItem .List(RowIndex1) 'Заполняются остальные столбцы элемента списка For j = 1 To n - 1 ListBox2.Column(j, RowIndex2) = .Column(j, RowIndex1) Next j 'Перемещенный элемент удаляется из списка .RemoveItem RowIndex1 RowIndex2 = RowIndex2 + 1 Else RowIndex1 = RowIndex1 + 1 End If Next i End With End Sub

Public Sub MoveAllItems(ByVal n As Byte, ByVal ListBox1 As Object, _ ByVal ListBox2 As Object) ' Перемещает все элементы первого списка в конец второго, ' возможно, не пустого списка с одновременным удалением данных из ' первого списка. ListBox1 -> ListBox2

Dim RowIndex1 As Integer, RowIndex2 As Integer, i As Byte RowIndex2 = ListBox2.ListCount For RowIndex1 = 0 To ListBox1.ListCount - 1 With ListBox1 ListBox2.AddItem .List(0) For i = 1 To n - 1 ListBox2.Column(i, RowIndex2) = .Column(i, 0) Next i RowIndex2 = RowIndex2 + 1 'Перемещенный,- это всегда первый элемент,удаляется из списка .RemoveItem 0 End With Next RowIndex1 End Sub




Начало  Назад  Вперед



Книжный магазин