Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
  • Avatar do usuário
Avatar do usuário
Por BritoMarques
Posts Avatar
#49414
Olá a todos!.
Pessoal estou tendo necessidade de desativar a funcionalidade das teclas ESC e CTRL, executar uma macro e reativar no final. Alguém pode me ajudar?
Por eduardogrigull
Posts
#49425
O Ctrl só dá de bloquear "sempre", não somente em um determinado tempo... O Esc podes tentar isso: Application.EnableCancelKey = xlDisabled
Coloque isso no início da macro e no fim coloque com o xlEnabled.
Avatar do usuário
Por BritoMarques
Posts Avatar
#49446
Obg pela dica Eduardo vou fazer e ver se dá cert.
Quanto a tecla CTRL meu objetivo na verdade é impedir que o usuário possa abortar a execução da macro e já que a tecla CTRL não pode poderia se inabilitar a tecla BREAK é possível?
Por eduardogrigull
Posts
#49447
Voce pode sim inabilitar, mas ai seria por todo o tempo que sua planilha estiver aberta.
Voce precisa colocar em Esta_pasta_de_trabalho > Workbook_Open()
Para bloquear o Break:
Código: Selecionar todos
Application.OnKey "{BREAK}", ""
Para bloquear o CTRL + Break:
Código: Selecionar todos
Application.OnKey "^{BREAK}", ""
Avatar do usuário
Por BritoMarques
Posts Avatar
#49460
Eduardo, sou grato a sua atenção.
Gostaria, se possível, de mais um esclarecimento:
1 - No caso basta inibir a tecla BREAK que a CRTL+BREAK também estaria inativa. Correto?
2- Após fechar a planilha a tecla volta a ter sua funcionalidade normalmente sem precisar de nenhum comando na saída. correto?
Fico no aguardo de sua presteza e agradeço antecipadamente a atenção
Por eduardogrigull
Posts
#49464
1- Não, são comandos diferentes. Bloquear a tecla Break só inibe ela sozinha. Bloquear o Ctrl Break inibe essa combinação de teclas.
2- Só é bloqueado enquanto o Excel estiver aberto, porém, é bloqueado em todas planilhas naquele momento. Após fechar a abrir qualquer outra planilha, não terá efeito, assim como no Windows
Avatar do usuário
Por Jimmy
Avatar
#49470
Brito,

Você não precisa inibir o cancelamento, pode apenas tratá-lo.

O xlErrorHandler faz com que qualquer tentativa de interrupção seja tratado como erro, e a macro abaixo desvia qualquer erro para a sub-rotina de tratamento. Se for interrupção (Esc ou Cntr-Break), mostra no Debug.print, e se não for interrupção (erro mesmo) exibe mensagem de erro.

O Loop vai até 8000 apenas para não correr o risco da macro não encerrar mais, ou demorar muito. Aumente ou diminua para seus testes.
Código: Selecionar todos
Sub NaoInterrompe()
    On Error GoTo TrataErro
    Application.EnableCancelKey = xlErrorHandler
    
    For B = 1 To 8000
        a = 55
        Range("A1").Value = a
        Calculate
    Next
    a = 1 / 0 'Erro simulado para ativa a rotina que trata erros
    
    Exit Sub
TrataErro:
    If Err.Number = 18 Then
        Debug.Print "Tentou " & Now()
        Resume
    Else
        MsgBox "Erro " & Err.Number & vbnerline & vbCrLf & _
               "Descrição: " & Err.Description, vbCritical, _
               "ERRO"
        Exit Sub
    End If

End Sub
Atenção para o fato de que, se houver um erro mesmo, será exibida uma mensagem. Se o operador teclar CTRL-Break na tela dessa mensagem, o código para e permite debug. É claro que mensagens assim não devem ocorrer com frequência, porque seriam resultado de um código mal feito, mas sempre é possível. Se não quiser essa possibilidade, arranje outra forma de avisar ao operador que o erro ocorreu.

Se esta mensagem colabora para a solução do problema, peço que dê um Like, clicando no botão com o "positivo", acima e a direita.

Jimmy San Juan
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord