Notifications
Clear all

Quando clicar em "fechar" da janela do formulário sair

9 Posts
3 Usuários
0 Reactions
1,885 Visualizações
(@cristy0505)
Posts: 28
Eminent Member
Topic starter
 

Bom dia,

Estou treinando VBA e criei um login e senha para acessar a planilha, mas isto é inútil se qualquer pessoa pode clicar em naquele "X" do canto superior direito e fechar o formulário.
Pois bem, gostaria de saber como que eu faço para quando clicar naquele X fechar a planilha junto forçando a pessoa a preencher nome e senha?

Grata.

"Only those who will risk going too far can possibly find out how far one can go."

 
Postado : 18/09/2012 9:10 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Use a pesquisa do fórum!!
search.php?keywords=bot%C3%A3o+fechar

Public bye As Boolean
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If bye = False Then
Cancel = Not bye
    MsgBox "Favor utilizar o botão ''Salvar e Sair'' da planilha.", vbCritical, "Atenção..."
End If
End Sub

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 18/09/2012 9:19 am
Charlie-81
(@charlie-81)
Posts: 290
Reputable Member
 

Tente usar o código abaixo:

1º Coloque o mesmo no formulário em que a senha deve ser digitada.
2º Substitua "Textbox1" pelo controle que você utiliza para digitar a senha, ou seja, nome do botão que digita a senha
3º Substitua "nome_da_planilha" pelo nome da sua planilha onde ficará a senha
4º Substitua a célula que colocará a senha

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If Me.TextBox1 = Sheets("nome_da_planilha").Cells(nº da linha onde colocou a senha, nº da coluna onde colocou a senha) Then ' mantenha a vírgula 
Unload Me
Else
MsgBox "kkkkkk... não achou que era simplesmente fechar que estaria livre de digitar a senha néh???", vbCritical, "Atenção" ' aqui a mensagem que desejar....
End If
End Sub

Blue eye | MB Intel Extreme DX58SO | Termaltake 775W | I7 950 LGA 1366 (Overclock 5.3 GZ) | Corsair Vengeance 16 GB | WC Corsair H70 | Aerocool Touch 2000 | Razer Mamba 4G | Som Volcano 50W RMS | Cooler Zalmam | HD 2TB | Radeon HD 8670 | Monitor 32'

 
Postado : 18/09/2012 10:58 am
(@cristy0505)
Posts: 28
Eminent Member
Topic starter
 

Boa tarde, agradeço as respostas, mas o login e senha estão num formulário que se abre assim que abre a planilha, mas no formulário (userform) existe aquele botãozinho de fechar no canto superior direito...

O campo de senha está no text box e não existe célula indicadora nem coluna...

Quero que caso a pessoa clique no X de fechar do userform, a planilha feche, encerre juntamente ao userform (formulário).

"Only those who will risk going too far can possibly find out how far one can go."

 
Postado : 18/09/2012 11:52 am
Charlie-81
(@charlie-81)
Posts: 290
Reputable Member
 

Então... vc pode adaptar as duas opções às suas necessidades, do contrário, disponibilize a planilha para ser adaptada.
Ou então, vc pode excluir o X (lazarento) do formulário. Para isto, siga os passos abaixo:

Insira o código em um novo MÓDULO

Private Declare Function FindWindow Lib "user32" _
                 Alias "FindWindowA" _
                       (ByVal lpClassName As String, _
                        ByVal lpWindowName As String) _
                        As Long
Private Declare Function GetWindowLong Lib "user32" _
                  Alias "GetWindowLongA" _
                        (ByVal hwnd As Long, _
                         ByVal nIndex As Long) _
                         As Long
Private Declare Function SetWindowLong Lib "user32" _
                  Alias "SetWindowLongA" _
                        (ByVal hwnd As Long, _
                         ByVal nIndex As Long, _
                         ByVal dwNewLong As Long) _
                         As Long
Const GWL_STYLE = (-16)
Const WS_SYSMENU = &H80000
Sub Charlie81(xForm)
    Dim hwnd As Long
    Dim GetStyle As Long
    Dim StApp As String
    Select Case Int(Val(Application.Version))
           Case 8
              StApp = "ThunderXFrame"
           Case Is > 8
              StApp = "ThunderDFrame"
    End Select
    hwnd = FindWindow(StApp, xForm.Caption)
    GetStyle = GetWindowLong(hwnd, GWL_STYLE)
    SetWindowLong hwnd, GWL_STYLE, GetStyle And Not WS_SYSMENU
End Sub

No evento initialize do formulário, acrescente:

Charlie81 Me

Blue eye | MB Intel Extreme DX58SO | Termaltake 775W | I7 950 LGA 1366 (Overclock 5.3 GZ) | Corsair Vengeance 16 GB | WC Corsair H70 | Aerocool Touch 2000 | Razer Mamba 4G | Som Volcano 50W RMS | Cooler Zalmam | HD 2TB | Radeon HD 8670 | Monitor 32'

 
Postado : 18/09/2012 12:21 pm
(@cristy0505)
Posts: 28
Eminent Member
Topic starter
 

Então, eu testei tudo isso e não deu certo, o X continua lá e o formulário continua podendo ser fechado pelo mesmo com a planilha continuando ali quietinha normalmente após o formulário fechado...

Certamente devo estar fazendo algo errado, mas não faço idéia o que exatamente.

Gostaria de aprender o que fiz de errado e por quê deu errado para que eu possa começar a entender a lógica...

Mais uma vez, muito obrigada pela paciência e atenção.

"Only those who will risk going too far can possibly find out how far one can go."

 
Postado : 18/09/2012 12:34 pm
(@cristy0505)
Posts: 28
Eminent Member
Topic starter
 

Desculpem, não achei o botão de editar mensagem.

Bom, gostaria de agradecer a atenção e paciência de todos vocês e deixar aqui a resposta caso futuramente alguém tenha a mesma dúvida que eu e ache este forum como eu achei pelo google.

Fechar planilha caso o botão X do formulário seja clicado:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = vbFormControlMenu Then
        Cancel = False
        Application.Quit
Application.DisplayAlerts = False
    End If
End Sub

Obs: estes códigos são inseridos dento do projeto do formulário.

"Only those who will risk going too far can possibly find out how far one can go."

 
Postado : 18/09/2012 1:02 pm
Charlie-81
(@charlie-81)
Posts: 290
Reputable Member
 

Como dito anteriormente, qualquer uma das respostas poderia ser adaptada, enfim, pelo menos encontrou a resposta conforme desejava.

Blue eye | MB Intel Extreme DX58SO | Termaltake 775W | I7 950 LGA 1366 (Overclock 5.3 GZ) | Corsair Vengeance 16 GB | WC Corsair H70 | Aerocool Touch 2000 | Razer Mamba 4G | Som Volcano 50W RMS | Cooler Zalmam | HD 2TB | Radeon HD 8670 | Monitor 32'

 
Postado : 18/09/2012 1:17 pm
Charlie-81
(@charlie-81)
Posts: 290
Reputable Member
 

veja....

Blue eye | MB Intel Extreme DX58SO | Termaltake 775W | I7 950 LGA 1366 (Overclock 5.3 GZ) | Corsair Vengeance 16 GB | WC Corsair H70 | Aerocool Touch 2000 | Razer Mamba 4G | Som Volcano 50W RMS | Cooler Zalmam | HD 2TB | Radeon HD 8670 | Monitor 32'

 
Postado : 18/09/2012 2:09 pm