Como restringir a exclusão de itens especificados da caixa de listagem usando access vba
-
21-12-2019 - |
Pergunta
Eu tenho uma caixa de listagem que contém 18 itens.O item selecionado pode ser excluído da caixa de listagem clicando no botão 'Excluir'.Como posso evitar que um usuário exclua determinados itens especificados por mim?
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
Solução
Você poderia armazenar os valores em uma tabela?Então você poderia ter uma coluna na tabela que especificasse se o campo poderia ser excluído ou não, o que seria fácil de incorporar ao seu VBA.
Edite para obter mais explicações:
Sua caixa de listagem está desvinculada (ou seja,nenhum campo específico como fonte de dados).
Crie uma tabela que contenha colunas para um ID (como uma numeração automática), os valores que você deseja que apareçam em sua caixa de listagem (como uma caixa de texto) e uma coluna final na qual você pode marcar sim ou não (como um campo booleano ou sim/não ).Por exemplo.
ID Values Allow deletion?
1 Example Yes
2 Another example No
3 Yes another example Yes
Na fonte de linha da sua caixa de listagem, selecione essa tabela.
Seu sub delete agora pode executar o código a seguir.
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
Isso irá procurar o valor que você pegou em sua caixa de listagem, combiná-lo com o campo Permitir exclusões, excluí-lo se esse campo estiver marcado como Sim ou deixá-lo como está se estiver marcado como Não.
Se você quiser excluir o campo apenas temporariamente e fazê-lo aparecer na próxima vez que carregar o formulário - na verdade, ocultá-lo, você terá que adicionar mais uma coluna à tabela chamada "Mostrar", que também seria um Sim/ Nenhum campo e defina o padrão como Sim.
Você então definiria seu rowsource como SELECT * FROM [YOURTABLE] WHERE [Show] = "Yes"
.
Então qry
no código acima deve ser definido como:
UPDATE [YOURTABLE] SET [YOURTABLE].[Show] = "No" WHERE ((([YOURTABLE].[Values])=YOURSELECTEDFIELD));
Isso alterará o valor de Mostrar para Não, portanto, quando a caixa de listagem for consultada novamente, ela não aparecerá mais.
Você precisará executar outra consulta para alterar todas elas de volta para Sim na saída do formulário.