Botão X do Formular...
 
Notifications
Clear all

Botão X do Formulario

9 Posts
1 Usuários
0 Reactions
4,097 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá colegas do Planilhando, gostaria de saber se tem como tirar o X de um formulario do VBA, pq o meu formulario de acesso eu gostaria que não tivesse o X, para que o usuario só possa fechar pelo botão que eu criei, pq se ele clicar no X pode dar erro no excel,.

Aguardo retorno.

 
Postado : 18/10/2011 7:08 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

dias, veja a dica do Edson, ela não oculta o Botão mas impede fechar o formulário pelo "X" :

Desabilitar Botão Sair x
viewtopic.php?f=23&t=375&p=1306&hilit=desabilitar#p1306

Mas se realmente quiser desabilitar os Botões, precisamos utilizar as API's do windows, de uma olhada no exemplo, só não tenho certeza se funciona no excel 2007, pois aqui no serviço não tenho esta versão para testar.

Formulario sem o "X" - excel 2003

Qualquer duvida retorne.

[]s

 
Postado : 18/10/2011 7:21 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa Tarde.

Mauro a planilha que voce postou esta com VB bloqueado por senha. Com a sua licença estou postando a macro que remove o X do formulário.

Coloque no evento initialize do form:

Private Sub UserForm_Initialize()
      Dim hwnd As Long, lStyle As Long
    If Val(Application.Version) >= 9 Then
       hwnd = FindWindow("ThunderDFrame", Me.Caption)
    Else
        hwnd = FindWindow("ThunderXFrame", Me.Caption)
   End If
    lStyle = GetWindowLong(hwnd, GWL_STYLE)
    SetWindowLong hwnd, GWL_STYLE, (lStyle And Not WS_SYSMENU)
End Sub

Em um Modulo:

Option Explicit
Public Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Public Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Const GWL_STYLE = -16
Public Const WS_SYSMENU = &H80000

Abraço.

 
Postado : 18/10/2011 11:43 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

VBA, que mancada a minha, na correria nem vi que estava protegido, grato pela informação e colaboração.

Atualizei o anexo, agora está desprotegido.

[]s

 
Postado : 18/10/2011 1:02 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá pessoal, obrigada pela ajuda.

Tentei os 2 codigos e inclusive o codigo da planilha e deu erro, eu tenho este codigo aqui:

Private Sub btacessar_Click()
Application.ScreenUpdating = False
Application.OnKey "{Escape}", ""

If txtusuario = "Admin" And txtsenha = "123" Or _
txtusuario = "admin" And txtsenha = "123" Then
Unload Me
frmcapa.Show
Else
MsgBox "Usuário ou Senha Inválido, favor contatar Dpto Técnico.", vbInformation, "Feba Indústria Mecânica Ltda"
End If
End Sub
Private Sub UserForm_Click()
With Me ' não apagar as informações continas no formulario
.Hide
End With
Unload Me
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Cancel = True ' desabilita o botão X do formulario.
Unload Me
End Sub

Private Sub btsair_Click()
Unload frmacesso
Application.Quit
End Sub

Ele faz certinho, desabilita o x mais como meu formulario e acesso, o usuario digital login e senha, e se estiver certo ele abre outra caixa, se tiver errado ele aparece mensagem, qdo ele abre outro formulario por cima qdo a resposta é verdadeira, o formulario do login agora esta continuando aberto ele não esta fechando com eu pedi no unload me.
Como corrijo minha programação?

Obrigada

 
Postado : 19/10/2011 5:30 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa Noite.
Estou postando o exemplo com se fosse sua planilha e está funcionado perfeitamente.Postei um exemplo na biblioteca de um modelo de tela de acesso atraves de VB.
viewtopic.php?f=21&t=2676

Abraço.

 
Postado : 19/10/2011 5:11 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Desculpe me agora que entendi o erro.

modifique esta linha

Application.ScreenUpdating = False

ficaria assim:

Application.ScreenUpdating = True

Abraço

 
Postado : 19/10/2011 6:08 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Muito bom o modelo, VBA.

Só umas dicas quanto a algumas instruções que Dias postou :
Primeiro, devemos tomar cuidado quando utilizamos o Metodo .Hide, ele não fecha e nem descarrega o Formulário, somente oculta o mesmo, e por consequencia fica ocupando memória, se fosse um formulário com várias informações pode deixar os procedimentos lentos ou até, dependendo, travar o aplicativo ou ocasionar aqueles tipos de erros que não é fácil identificar.

Segundo, na rotina que postou : UserForm_QueryClose, se não for utilizar a opção para esconder o "X", você tem de colocar conforme o exemplo no link que passei :

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
Cancel = True
MsgBox "aqui_vai_sua_mensagem_se_quiser_uma", vbInformation
End If
End Sub

Cancel é outra instrução que devemos tomar cuidado, dependendo de onde a utilizamos precisamos reverter a condição Bollean de True pra False ou vice e versa.

[]s

 
Postado : 19/10/2011 8:05 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Ok Obrigada pelas dicas, irei fazer os testes e respondo ok.
Aproveitando gostaria de tirar uma duvida,
esta planilha bloque-ei para só terem acesso os computadores que eu determinei, esta funcionando perfeitamente, porem tenho uma duvida, se outra pessoa pegar minha planilha, e as macros do computador dela estiverem desabilitadas, então minha planilha não vai fazer a verificação se o computador dela esta liberado para acesso ou não, e o usuario que ñ esta permitido pode fuçar na minha planilha e até modifica*la.
Tem alguma macro que ao iniciar a planilha ela habilite as macros do computador para que este tipo de erro não aconteça?

 
Postado : 20/10/2011 5:00 am