Cómo restringir la eliminación de elementos específicos del cuadro de lista usando Access VBA

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

  •  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
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top