Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marlon S

Comando para desbloquear célula de formulário

Recommended Posts

Olá, gostaria de saber como, por exemplo, por um clique duplo, consigo desbloquear/ativar uma célula de um formulário Access sem que seja necessário que o usuário entre em Design, folha de propriedades... ou entre na tabela toda vez que precisar editar um dado. Por outro lado, tais dados devem estar bloqueados/desativados para que não se corra o risco de uma alteração acidental.

Assim, procuro por uma macro ou uma linha de comando que resolva a situação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Marion,

 

No VB .Net exite uma função maravilhosa incrementada ao "for each", que acredito não funcionar no VBA, mas enfim, segue uma maneira mais "crua" da rotina:

 

Primeiro crie um módulo:

 

Sub modMsgErr()

modMsg = MsgBox("Erro número: " & Err.Number & vbLf & vbLf & Err.Description, vbCritical, strTitle)

End Sub

Sub modBlock()
Dim numCount As Integer 'Variável para contar os objetos do form
Dim bolSit As Boolean 'Variável para definir block or unblock

On Error GoTo Err_Block

'Atribuição à variável
numCount = Form_ifrmImasters.Count

'Verificação se a rotina block or unblock
If Form_ifrmImasters.blockCommand.Caption = "&Unblock" Then
bolSit = False
Form_ifrmImasters.blockCommand.Caption = "&Block"
Else
bolSit = True
Form_ifrmImasters.blockCommand.Caption = "&Unblock"
End If

Dim i As Integer 'Variável "contadora" do for
For i = 1 To numCount - 1

'Rotina que irá "varrer" todo o form procurando caixas de texto para block ou unblock
If TypeName(Form_ifrmImasters.Controls.Item(i)) = "TextBox" Then
Call modLocked(i, bolSit)
End If

Next


Exit_Block:
Exit Sub

Err_Block:
modMsgErr

Resume Exit_Block

End Sub

Sub modLocked(j As Integer, b As Boolean)

'A variável j recebe i e b recebe o "true" or "false" para o bloqueio
Form_ifrmImasters.Controls.Item(j).Locked = b

End Sub[/Code]

 

 

Em seguida atribua esta ação a um comando - respeitando o nome e o caption do botão:

 

[Code]Private Sub blockCommand_Click()

Call modBlock

End Sub[/Code]

 

 

 

 

PS: segue a citada função do .NET - neste caso sendo utilizada para "limpar" o form...

 

[Code]For Each ctl As Control In Me.Controls

If TypeOf ctl Is TextBox Then
DirectCast(ctl, TextBox).Clear()
End If

Next[/Code]

 

 

 

 

Sem mais,

 

Julien Sorel

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.