Notifications
Clear all

Melhorar Workbook_BeforeClose(Cancel As Boolean)

8 Posts
3 Usuários
0 Reactions
1,236 Visualizações
(@jnexcel)
Posts: 298
Reputable Member
Topic starter
 

Prezados, bom dia!

eu localizei na internet esse código abaixo:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

If NoEvents Then Exit Sub

MsgBox "Esse botão foi desabilitado pelo Administrador do sistema", vbInformation, "Aviso"

Cancel = True

End Sub

esse código dasativa o X da janela do excel (janela que é utilizada para encerrar o excel aberto).

se o usuário clicar no X é exibida a mensagem

se o usuário tentar usar o alt+f4 é exibida a mensagem

minha dúvida fica por conta do seguinte.

como posso melhorar esse código?

eu preciso continuar com essa mensagem e remover os botões (os botões não vao aparecer para o usuário).

já agradeço muito aos que vão colaborar.

 
Postado : 06/04/2018 5:17 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

JNEXCEL,

Bom dia!

Veja as informações do colega Mauro Coutinho (integrante também desse fórum) no fórum do Tomás Vasquez:
http://www.tomasvasquez.com.br/forum/vi ... .php?t=593

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 06/04/2018 5:56 am
(@jnexcel)
Posts: 298
Reputable Member
Topic starter
 

Olá, muito obrigado pela indicação, no meu sistema 32 bits funcionou corretamente. :)

porém eu estou com uma dúvida. Como faço para rodar em 64 bits esse código abaixo?

código do link.

Declare Function FindWindow32 Lib "user32" Alias "FindWindowA" _
        (ByVal lpClassName As Any, ByVal lpWindowName As Any) As Integer
Declare Function GetWindowLong32 Lib "user32" Alias "GetWindowLongA" _
        (ByVal hWnd As Integer, ByVal nIndex As Integer) As Long
Declare Function SetWindowLong32 Lib "user32" Alias "SetWindowLongA" _
        (ByVal hWnd As Integer, ByVal nIndex As Integer, _
        ByVal dwNewLong As Long) As Long
        
Global Const GWL_STYLE = (-16)
Global Const WS_SYSMENU = &H80000

eu preciso que esse código rode tanto em 32 quanto 64bits. eu estou mencionando isso, pois no código acima existe uma citação ao "user32", no caso eu tenho que acrescentar user64?

ficaria assim?

código para rodar em 32 e 64.

Declare Function FindWindow32 Lib "user32" Alias "FindWindowA" _
        (ByVal lpClassName As Any, ByVal lpWindowName As Any) As Integer
Declare Function GetWindowLong32 Lib "user32" Alias "GetWindowLongA" _
        (ByVal hWnd As Integer, ByVal nIndex As Integer) As Long
Declare Function SetWindowLong32 Lib "user32" Alias "SetWindowLongA" _
        (ByVal hWnd As Integer, ByVal nIndex As Integer, _
        ByVal dwNewLong As Long) As Long

Declare Function FindWindow64 Lib "user64" Alias "FindWindowA" _
        (ByVal lpClassName As Any, ByVal lpWindowName As Any) As Integer
Declare Function GetWindowLong64 Lib "user64" Alias "GetWindowLongA" _
        (ByVal hWnd As Integer, ByVal nIndex As Integer) As Long
Declare Function SetWindowLong64 Lib "user64" Alias "SetWindowLongA" _
        (ByVal hWnd As Integer, ByVal nIndex As Integer, _
        ByVal dwNewLong As Long) As Long

Muito obrigado

 
Postado : 06/04/2018 6:31 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Cara, aí eu já não sei essa questão de uso das API's do Windows. Creio que um pouco mais de pesquisa ou até mesmo o autor do código (Mauro Coutinho) possa te esclarecer isso.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 06/04/2018 7:45 am
(@jnexcel)
Posts: 298
Reputable Member
Topic starter
 

Obrigado. Como faço para entrar em contato com ele, você poderia me informar? agradeço desde já

 
Postado : 06/04/2018 8:19 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Bom... ele é participante aqui do fórum. Inclusive também é um dos moderadores. Acredito que ele deva estar sempre por aqui e, nesse caso, poderá ver essas mensagens.

Caso contrário, envie uma MP (Mensagem Privada) para ele.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 06/04/2018 9:17 am
(@teleguiado)
Posts: 142
Estimable Member
 

Tente declarar conforme abaixo e veja se funciona.

#If VBA7 Then
Declare PtrSafe Function FindWindow32 Lib "user32" Alias "FindWindowA" _
        (ByVal lpClassName As Any, ByVal lpWindowName As Any) As Integer
Declare PtrSafe Function GetWindowLong32 Lib "user32" Alias "GetWindowLongA" _
        (ByVal hWnd As Integer, ByVal nIndex As Integer) As Long
Declare PtrSafe Function SetWindowLong32 Lib "user32" Alias "SetWindowLongA" _
        (ByVal hWnd As Integer, ByVal nIndex As Integer, _
        ByVal dwNewLong As Long) As Long

#Else
Declare Function FindWindow32 Lib "user32" Alias "FindWindowA" _
        (ByVal lpClassName As Any, ByVal lpWindowName As Any) As Integer
Declare Function GetWindowLong32 Lib "user32" Alias "GetWindowLongA" _
        (ByVal hWnd As Integer, ByVal nIndex As Integer) As Long
Declare Function SetWindowLong32 Lib "user32" Alias "SetWindowLongA" _
        (ByVal hWnd As Integer, ByVal nIndex As Integer, _
        ByVal dwNewLong As Long) As Long

#End If

Obrigado.

Teleguiado.
E-mail: [email protected]

 
Postado : 06/04/2018 12:28 pm
(@jnexcel)
Posts: 298
Reputable Member
Topic starter
 

Agradeço pela atenção. Eu vou testar aqui.

 
Postado : 06/04/2018 12:50 pm