Página 1 de 1

Pausar uma macro de forma que permita a edição da planilha

Enviado: 12 Nov 2015 às 13:19
por TheNenay
Boa tarde pessoal

Tenho uma planilha que possui essa macro abaixo, que após a edição de uma célula, protege a mesma. Só que eu estou precisando adicionar um tempo de 1 minuto antes para as pessoas que vão preenche-las poderem consertar algo em caso de erro, já tentei mas não deu certo porque depois que adiciono os códigos eles meio que travam a planilha.

Macro
Código: Selecionar todos
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range

    ActiveSheet.Unprotect Password:="senha"
    Cells.Locked = False
    On Error Resume Next
    Set rng = Cells.SpecialCells(xlCellTypeFormulas)
    If Err.Number > 0 Then
        Set rng = Cells.SpecialCells(xlCellTypeConstants)
    Else
        Set rng = Union(rng, Cells.SpecialCells(xlCellTypeFormulas))
    End If
    On Error GoTo 0
 
    If Not rng Is Nothing Then rng.Locked = True
 
    ActiveSheet.Protect Password:="senha"
 
End Sub
Tentativas mal sucedidas

1ª-
Código: Selecionar todos
newHour = Hour(Now()) 
newMinute = Minute(Now()) + 1 
newSecond = Second(Now()) 
waitTime = TimeSerial(newHour, newMinute, newSecond) 
Application.Wait waitTime
2ª-
Código: Selecionar todos
 Application.Wait (Now + TimeValue("0:01:00"))
Desde já agradeço a todos.

Re: Pausar uma macro de forma que permita a edição da planil

Enviado: 12 Nov 2015 às 14:57
por alexandrevba
Boa tarde!!

Eu te recomendo, usa o evento Worksheet_Change, apenas para chamar a macro que vai bloquear a célula
Código: Selecionar todos
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Call Bloquear
End Sub
Código: Selecionar todos
Sub Bloquear()
    'Código Aqui
End if
Talvez, seria melhor habilitar via senha a edição....
Att

Pausar uma macro de forma que permita a edição da planilha

Enviado: 13 Nov 2015 às 09:13
por TheNenay
Obrigado por tentar me ajudar.

Essa é até uma boa alternativa, o problema é que o usuário teria que clicar duas vezes para poder bloquear a célula, o que não seria viável. Preciso de uma forma de bloqueio automática.

E como faço para habilitar essa senha via edição?

Re: Pausar uma macro de forma que permita a edição da planil

Enviado: 13 Nov 2015 às 10:48
por alexandrevba
Bom dia!!

Por favor esse modelo de código é apenas uma exemplo, favor adaptar!!!!
Código: Selecionar todos
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim NewValue As Variant, OldValue As Variant
    If Target.Count > 1 Then Exit Sub

    If Not Intersect(Target, Range("A1:F10")) Is Nothing Then
        NewValue = Target.Value
        Application.EnableEvents = False
        Application.Undo
        OldValue = Target.Value
        If OldValue = "" Then
            Target.Value = NewValue
        ElseIf InputBox("Digite a senha") = "pwd" Then
            Target.Value = NewValue
        Else: MsgBox "Você não pode alterar o conteudo da celula.", 16, "Células Bloqueadas"
        Target.Value = OldValue
        Else
            Target.Value = NewValue
        End If
        Application.EnableEvents = True
    End If
End Sub
Att

Re: Pausar uma macro de forma que permita a edição da planil

Enviado: 13 Nov 2015 às 13:06
por TheNenay
Obrigado Alexandre
Adaptei esse código aqui mas não atendeu a minha necessidade. Mas com base na sua resposta citada aqui em abaixo, eu tive uma ideia alternativa.

Seguindo a linha de raciocínio de oferecer de alguma forma ao usuário a chance de consertar o seu erro eu cheguei no resultado do código abaixo, que permite ao usuário alterar a planilha enquanto a mesma estiver aberta, ai quando o usuário fechar a mesma e abri-lá novamente ele não vai mais conseguir alterar aquelas células preenchidas.
Código: Selecionar todos
Private Sub Workbook_Open()
    Dim rng As Range

    ActiveSheet.Unprotect Password:="senha"
    Cells.Locked = False
 
    On Error Resume Next
    Set rng = Cells.SpecialCells(xlCellTypeFormulas)
    If Err.Number > 0 Then
        Set rng = Cells.SpecialCells(xlCellTypeConstants)
    Else
        Set rng = Union(rng, Cells.SpecialCells(xlCellTypeFormulas))
    End If
    On Error GoTo 0
 
    If Not rng Is Nothing Then rng.Locked = True
 
    ActiveSheet.Protect Password:="senha"
End Sub
alexandrevba escreveu:Boa tarde!!

Eu te recomendo, usa o evento Worksheet_Change, apenas para chamar a macro que vai bloquear a célula
Código: Selecionar todos
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Call Bloquear
End Sub
Código: Selecionar todos
Sub Bloquear()
    'Código Aqui
End if
Talvez, seria melhor habilitar via senha a edição....
Att
Muito obrigado Alexandre pela ajuda.