Comment restreindre la suppression d'éléments particuliers de zone de liste à l'aide de access vba
-
21-12-2019 - |
Question
J'ai une zone de liste qui contient des 18 critères suivants.L'élément sélectionné peut être supprimé de la liste en cliquant sur un bouton "Supprimer".Comment puis-je empêcher un utilisateur de la suppression de certains éléments que je le préciser?
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
La solution
Vous pouvez stocker les valeurs dans un tableau?Ensuite, vous pourriez avoir une colonne dans le tableau qui précise si le champ peut être supprimé ou pas, ce qui serait facile à construire votre VBA.
Edit pour plus d'explications:
Avez-vous listbox être indépendant (c'est à direaucun domaine spécifique comme source de données).
Créer une table qui contient des colonnes pour un ID (comme un numéroauto), les valeurs que vous souhaitez voir apparaître dans votre zone de liste (comme une zone de texte), et une dernière colonne vous pouvez cocher la case oui ou non (comme un booléen ou un champ oui/non).E. g.
ID Values Allow deletion?
1 Example Yes
2 Another example No
3 Yes another example Yes
Dans la listbox de contenu (rowsource), sélectionnez la table.
Votre supprimer des sous peut maintenant exécuter le code suivant.
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
Ce sera pour la valeur que vous aurez récupéré à partir de votre zone de liste, le match contre l'Autoriser suppressions de terrain, de la supprimer si ce champ est marqué par l'affirmative ou la laisser si elle est marquée comme Non.
Si vous voulez seulement de supprimer temporairement le champ et qu'elle s'affiche prochaine fois que vous chargez le formulaire en effet, les cacher, vous devez ajouter une nouvelle colonne à la table appelée "Spectacle", qui serait également un champ Oui/Non, et de définir la valeur par défaut est Oui.
Vous devez ensuite configurer votre contenu (rowsource) pour SELECT * FROM [YOURTABLE] WHERE [Show] = "Yes"
.
Alors qry
dans le code ci-dessus devrait plutôt être configuré pour:
UPDATE [YOURTABLE] SET [YOURTABLE].[Show] = "No" WHERE ((([YOURTABLE].[Values])=YOURSELECTEDFIELD));
Ce sera ensuite modifier la valeur de Montrer à Pas, de sorte que lorsque la zone de liste est actualisée, il n'apparaît plus.
Vous aurez besoin pour exécuter une autre requête pour modifier l'ensemble de leur retour à la Oui sur la forme de sortie.