Cómo restringir la eliminación de elementos específicos del cuadro de lista usando Access VBA
-
21-12-2019 - |
Pregunta
Tengo un cuadro de lista que contiene 18 elementos.El elemento seleccionado se puede eliminar del cuadro de lista haciendo clic en el botón "Eliminar".¿Cómo puedo evitar que un usuario elimine ciertos elementos que especifico?
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
Solución
¿Podrías almacenar los valores en una tabla?Entonces podría tener una columna en la tabla que especificara si el campo se puede eliminar o no, lo que sería fácil de integrar en su VBA.
Edite para obtener más explicaciones:
¿Su cuadro de lista no está vinculado (es decir,ningún campo específico como fuente de datos).
Cree una tabla que contenga columnas para un ID (como numeración automática), los valores que desea que aparezcan en su cuadro de lista (como cuadro de texto) y una columna final en la que puede marcar sí o no (como campo booleano o sí/no). ).P.ej.
ID Values Allow deletion?
1 Example Yes
2 Another example No
3 Yes another example Yes
En el origen de filas de su cuadro de lista, seleccione esa tabla.
Su sub de eliminación ahora podría ejecutar el siguiente código.
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
Esto buscará el valor que tomó de su cuadro de lista, lo comparará con el campo Permitir eliminaciones, lo eliminará si ese campo está marcado como Sí o lo dejará así si está marcado como No.
Si desea eliminar solo temporalmente el campo y que aparezca la próxima vez que cargue el formulario (o, de hecho, ocultarlo), tendrá que agregar una columna adicional a la tabla llamada "Mostrar", que también sería un Sí/ Ningún campo y establezca el valor predeterminado en Sí.
Luego configurarías tu origen de fila en SELECT * FROM [YOURTABLE] WHERE [Show] = "Yes"
.
Entonces qry
en el código anterior debería establecerse en:
UPDATE [YOURTABLE] SET [YOURTABLE].[Show] = "No" WHERE ((([YOURTABLE].[Values])=YOURSELECTEDFIELD));
Esto luego cambiará el valor de Mostrar a No, de modo que cuando se vuelva a consultar el cuadro de lista, ya no aparecerá.
Deberá ejecutar otra consulta para volver a cambiarlas todas a Sí en la salida del formulario.