So schränken Sie das Löschen bestimmter Elemente aus dem Listenfeld mithilfe von Access vba ein
-
21-12-2019 - |
Frage
Ich habe eine Listbox, die 18 Elemente enthält.Das ausgewählte Element kann aus dem Listenfeld gelöscht werden, indem Sie auf die Schaltfläche 'Löschen' klicken.Wie kann ich verhindern, dass ein Benutzer bestimmte von mir angegebene Elemente löscht?
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
Lösung
Sie könnten die Werte in einer Tabelle speichern?Dann könnten Sie eine Spalte in der Tabelle haben, die angibt, ob das Feld gelöscht werden kann oder nicht, was einfach in Ihren VBA zu integrieren wäre.
Bearbeiten für weitere Erklärungen:
Haben Sie listbox ungebunden (dh.kein spezifisches Feld als Datenquelle).
Erstellen Sie eine Tabelle, die Spalten für eine ID (als automatische Nummerierung), die Werte, die in Ihrem Listenfeld angezeigt werden sollen (als Textfeld), und eine letzte Spalte enthält, in der Sie Ja oder Nein ankreuzen können (als boolesches oder Ja / Nein-Feld).Z.B.
ID Values Allow deletion?
1 Example Yes
2 Another example No
3 Yes another example Yes
Wählen Sie in der Zeilenquelle Ihrer Listbox diese Tabelle aus.
Ihr Löschunter könnte jetzt den folgenden Code ausführen.
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
Dadurch wird nach dem Wert gesucht, den Sie aus Ihrem Listenfeld abgerufen haben, mit dem Feld Löschungen zulassen abgeglichen, gelöscht, wenn dieses Feld als Ja markiert ist, oder belassen, wenn es als Nein markiert ist.
Wenn Sie das Feld nur vorübergehend löschen und es beim nächsten Laden des Formulars anzeigen lassen möchten, müssen Sie der Tabelle eine weitere Spalte mit dem Namen "Anzeigen" hinzufügen, die ebenfalls ein Ja / Nein-Feld wäre, und die Standardeinstellung auf Ja setzen.
Sie würden dann Ihre Zeilenquelle auf Folgendes setzen SELECT * FROM [YOURTABLE] WHERE [Show] = "Yes"
.
Dann qry
im obigen Code sollte stattdessen auf gesetzt werden:
UPDATE [YOURTABLE] SET [YOURTABLE].[Show] = "No" WHERE ((([YOURTABLE].[Values])=YOURSELECTEDFIELD));
Dadurch wird dann der Wert von Show in No geändert. Wenn das Listenfeld angefordert wird, wird es nicht mehr angezeigt.
Sie müssen eine weitere Abfrage ausführen, um alle beim Beenden des Formulars wieder auf Ja zu setzen.