Excel Vba

Travando dimensões da janela Excel com VBA

Nessa postagem vou demonstrar como travar a sua janela Excel utilizando VBA, para isso copie o código abaixo em um modulo e execute a rotina myLockon para travar a janela ou a rotina myLockoff para destravar.

Option Explicit
'Declarando variaveis publicas
Dim dblAppT As Double
Dim dblAppL As Double
Dim dblAppH As Double
Dim dblAppW As Double
Dim dblAppS As Double
Dim fApp    As Boolean

'Habilitando trava na janela
Sub myLockon()
    mySizeLock True
End Sub

'Desabilitando a trava na janela
Sub myLockoff()
    mySizeLock False
End Sub

'Rotina que argumento verdadeiro ou falso para trava da janela
Sub mySizeLock(myFlg As Boolean)
    With Application
        If myFlg Then
            dblAppT = .Top
            dblAppL = .Left
            dblAppH = .Height
            dblAppW = .Width
            dblAppS = .WindowState
            fApp = True
            .OnTime Now() + TimeValue("00:00:01"), "dblAppSizeLock"
        Else
            fApp = False
        End If
    End With
End Sub

'Rotina responsavel pela alteração nas dimensões da janela
'conforme status verdadeiro ou falso da variavel fAPP
Sub dblAppSizeLock()
    Do While fApp = True
        DoEvents
        With Application
        If .WindowState <> dblAppS Then .WindowState = dblAppS
            If dblAppS = xlNormal Then
            If dblAppT <> .Top Then .Top = dblAppT
            If dblAppL <> .Left Then .Left = dblAppL
            If dblAppH <> .Height Then .Height = dblAppH
            If dblAppW <> .Width Then .Width = dblAppW
            End If
        End With
    Loop
End Sub

O código é na verdade uma GAMBIARRA que funciona, mas tem suas desvantagem. A ideia é capturar as dimensões e localização da janela ao se travar e disparar códigos em tempo de execução pré programados para voltar a janela a todo momento, mesmo parecendo que não esta travando sua planilha por conta do DoEvents, o codigo esta sendo disparado em loop e isso trava algumas funcionalidades.

Clique aqui para baixar o arquivo modelo utilizado nessa postagem.

Deixe uma resposta