Come limitare l'eliminazione di elementi specificati dalla casella di riepilogo utilizzando l'accesso vba

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

  •  21-12-2019
  •  | 
  •  

Domanda

Ho una casella di riepilogo che contiene 18 elementi.L'elemento selezionato può essere eliminato dalla casella di riepilogo facendo clic sul pulsante "Elimina".Come posso impedire a un utente di eliminare determinati elementi specificati?

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
È stato utile?

Soluzione

Potresti memorizzare i valori in una tabella?Quindi potresti avere una colonna nella tabella che specifica se il campo può essere eliminato o meno, il che sarebbe facile da integrare nel tuo VBA.

Modifica per ulteriori spiegazioni:

La casella di riepilogo non è associata (ad es.nessun campo specifico come origine dati).

Crea una tabella che contenga le colonne per un ID (come numero automatico), i valori che vuoi che appaiano nella tua casella di riepilogo (come casella di testo) e una colonna finale su cui puoi selezionare sì o no (come campo booleano o sì/no ).Per esempio.

ID     Values                Allow deletion?
1      Example               Yes
2      Another example       No
3      Yes another example   Yes

Nel rowsource della tua casella di riepilogo, seleziona quella tabella.

Il tuo sottotitolo di eliminazione ora potrebbe eseguire il seguente codice.

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

Questo cercherà il valore che hai preso dalla tua casella di riepilogo, lo abbinerà al campo Consenti eliminazioni, lo eliminerà se quel campo è contrassegnato come Sì o lo lascerà così se è contrassegnato come No.

Se desideri eliminare solo temporaneamente il campo e farlo apparire la prossima volta che carichi il modulo - in effetti, nasconderlo, dovresti aggiungere un'ulteriore colonna alla tabella chiamata "Mostra", che sarebbe anche un Sì/ Nessun campo e impostare il valore predefinito su Sì.

Dovresti quindi impostare il tuo rowsource su SELECT * FROM [YOURTABLE] WHERE [Show] = "Yes".

Poi qry nel codice sopra dovrebbe invece essere impostato su:

UPDATE [YOURTABLE] SET [YOURTABLE].[Show] = "No" WHERE ((([YOURTABLE].[Values])=YOURSELECTEDFIELD));

Ciò modificherà quindi il valore di Mostra su No, quindi quando viene eseguita nuovamente la query sulla casella di riepilogo, non verrà più visualizzata.

Dovrai eseguire un'altra query per reimpostarli tutti su Sì all'uscita del modulo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top