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
#5069
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.
#5074
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
#5091
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?
#5095
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
#5097
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.
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