Como restringir a exclusão de itens especificados da caixa de listagem usando access vba

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

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

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top