Comment restreindre la suppression d'éléments particuliers de zone de liste à l'aide de access vba

StackOverflow https://stackoverflow.com//questions/22054129

  •  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
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top