Как ограничить удаление указанных элементов из списка с помощью Access VBA
-
21-12-2019 - |
Вопрос
У меня есть список, содержащий 18 элементов.Выбранный элемент может быть удален из списка, нажав кнопку «Удалить».Как я могу помешать пользователю удалять определенные элементы, которые я указываю?
Private Sub cmdDelete_Click()
Dim i As Integer
With Me.listbox1
For i = .ListCount - 1 To 0 Step -1
If .Selected(i) = True Then
.RemoveItem i
End If
Next i
End With
End Sub
. Решение
Вы можете хранить значения в таблице? Тогда у вас может быть столбец в таблице, которая указала, может ли поле можно удалить или нет, это было бы легко встроить в вашу VBA.
У вас есть перевязанный ящик (то есть нет конкретного поля в качестве его данных).
Создать таблицу, которая содержит столбцы для идентификатора (в качестве автонатора), значения, которые вы хотите появиться в вашем списке (в качестве текстового полета), и окончательный столбец, который вы можете отметить YES или NOT (как логический или да / нет поля). Например.
ID Values Allow deletion?
1 Example Yes
2 Another example No
3 Yes another example Yes
.
в Rowsouse вашего списка, выберите эту таблицу.
Ваш SUB DELETE теперь может выполнить следующий код.
dim qry as string
dim strLookup as string
strLookup = dlookup("[Allow deletion]","[Your Table]", YOURSELECTEDFIELDHERE & "=[Values]")
if strLookup = "No" Then
msgbox "You're not allowed to delete this field."
exit sub
else
qry = "DELETE * FROM [Your Table] WHERE [Values] = YOURSELECTEDFIELDHERE"
CurrentDB.Execute qry
Me.YourListBoxName.Requery
end if
.
Это будет искать значение, которое вы схватили из вашего списка, сопоставьте его против полевых удалений, удалите его, если это поле помечено как да или оставьте, если он помечен как нет.
Если вы хотите временно удалить только поле и появиться в следующий раз, когда вы загрузите форму - по сути, скрыть его, вам придется добавить еще один столбец к таблице, называемую «Show», которая также будет поле да / нет, и установите по умолчанию для да.
Вы бы затем установили ваш orowsource для GeneracodicTagcode.
Тогда SELECT * FROM [YOURTABLE] WHERE [Show] = "Yes"
в вышеуказанном коде должно быть установлено значение:
UPDATE [YOURTABLE] SET [YOURTABLE].[Show] = "No" WHERE ((([YOURTABLE].[Values])=YOURSELECTEDFIELD));
.
Это затем изменит значение шоу на нет, поэтому, когда список переключается, он больше не появится.
Вам нужно будет запустить другой запрос, чтобы изменить все из них обратно в YES на выходе на форму.