У меня есть приложение MS Access 2007, которое имеет несколько форм, где я использовал один и тот же дизайн списка. У меня есть два списка, один из которых GetS значения из таблицы с помощью запроса, как:MS Access 2007 VBA - Код кода многократного использования
SELECT id, value FROM table
И второй, который изначально пуст. Между этими двумя списками расположены кнопки добавления и удаления, которые по умолчанию отключены. Щелчок по значению в первом списке позволяет добавить кнопку, а при щелчке по значению во втором списке появляется кнопка удаления. Нажатие кнопки добавления добавляет выбранный элемент во второй список, а нажатие кнопки удаления удаляет элемент для второго списка.
код у меня есть для кнопки добавления следующим образом («ALLLIST» относится к списку значений запроса, «SELECTEDLIST» является тот, который изначально пуст):
Dim selectedId, selectedValue, safeValue As String
Dim existing As Boolean
Dim index As Integer
existing = False
selectedId = Me.ALLLIST.Value
index = Me.ALLLIST.ListIndex
selectedValue = Me.ALLLIST.Column(1,index)
'Loop through the list of selected values and see if this one has already been added to the list
For i = 0 To (Me.SELECTEDLIST.ListCount)
If (Me.SELECTEDLIST.Column(0, i) = selectedId) Then
existing = True
End If
Next i
'Only add the value if it's not already on the list
If (existing) Then
MsgBox "This list can't contain duplicate values", vbOKOnly + vbInformation, "Error"
Else
safeValue = Replace(selectedValue & "", "'", "''")
Me.SELECTEDLIST.AddItem (selectedId & ";'" & safeValue & "'")
Me.SELECTEDLIST.Value = Null
Me.REMOVEBUTTON.Enabled = False
End If
И код кнопка Удалить:
Dim numItems, index As Integer
index = Me.SELECTEDLIST.ListIndex
'Remove the selected item and move to the top of the list
Me.SELECTEDLIST.RemoveItem (index)
Me.SELECTEDLIST.Selected(0) = True
numItems = Me.SELECTEDLIST.ListCount
'Cosmetic feature, select the row above the one we're removing
If (index > 0) Then
Me.SELECTEDLIST.Selected(index - 1) = True
Else
Me.SELECTEDLIST.Selected(0) = True
End If
'If the list is empty now, disable the remove button
If (numItems = 0) Then
Me.ALLLIST.SetFocus
Me.REMOVEBUTTON.Enabled = False
Me.SELECTEDLIST.Selected(-1) = True
End If
то, что я хотел бы сделать это, а не копировать и вставить этот код повсюду, имеют этот шаблон хранится где-то, а затем в моей форме кода написать что-то вроде:
hookUpLists(allListName, selectedListName, addButtonName, removeButtonName)
Как это сделать? Могу ли я написать модуль, чтобы сделать это как? Я также открыт для любых улучшений, которые я могу сделать по вышеуказанному коду.
Благодарности
Я думаю, вы должны быть в состоянии сделать это с помощью модуля класса, но это связано с тем, что я не смогу предоставить подробную информацию о том, как это сделать. – HK1