Notifications
Clear all

Celula desbloqueia quando altero uma celula

15 Posts
3 Usuários
0 Reactions
2,159 Visualizações
(@vonzuben)
Posts: 549
Prominent Member
Topic starter
 

Fiz o bloqueio da celula H1, sendo ao clicar no botao +, insere uma linha e H11 continua bloqueada ( referente da cópia H1), pois até aqui tudo bem.
Quando vou no Status 1 na G11, que tem uma lista suspensa e coloco Aberto, celula H11 e H1 desbloqueia.
Gostaria que ficasse bloqueada

Outra coisa é código '--- Uppercase --- na plan2(Lista)

Sendo quando escrevo o nome na celula C11 e pressiono Enter acontece erro " Não é possível definir a propriedade Locked da classe Range"
OBS: se deixo a celula I11 sem o valor ON não acontece o erro, mas preciso que On já fique ativado.

Obrigado !

 
Postado : 04/01/2017 9:52 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia vonzuben,

Na verdade não está desbloqueando a célula, ele está apenas copiando uma célula desbloqueada...
Bloqueie a célula H1 e clica no "+" para inserir a linha.

Quanto ao impedimento de definir a propriedade Locked da Classe Range, é porque a Sheet está protegida no momento que está tentando definir...
Acredito que esteja dando muita volta para a mesma coisa na planilha.

Não há necessidade de ficar inserindo a mesma fórmula toda hora para uma célula...

Qualquer coisa da o grito.
Abraço

 
Postado : 05/01/2017 7:59 am
(@vonzuben)
Posts: 549
Prominent Member
Topic starter
 

H1 está bloqueada sim, pois selecionei, botão direito, formatar celula e coloquei bloquear e inserir a senha ( Quando coloco o mouse em cima já não consigo ver a formula )
Ao inserir linha ela passa para H11 tb bloqueada, pq coloquei o mouse e tb não consegui ver a formula.

Não entendi isso
" Não há necessidade de ficar inserindo a mesma fórmula toda hora para uma célula... "

 
Postado : 05/01/2017 8:24 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Acabei de baixar a planilha novamente e a célula H1 está desbloqueada.
Eu apenas a bloqueei e cliquei no "+" e ela veio bloqueada normalmente...

Não entendi isso
" Não há necessidade de ficar inserindo a mesma fórmula toda hora para uma célula... "

Na propriedade Workbook_Change tem essa rotina:

If Range("I" & Linha).Value = "ON" Then

    With Range("H" & Linha)
        
        .FormulaR1C1 = _
        "=IF(RC[-1]=0,0,RC[-3]+RC[-2])"
        .Locked = True
        
    End With

ElseIf Range("I" & Linha).Value = "OC" Then
    
    With Range("H" & Linha)
        .Value = ""
    End With

    ActiveSheet.EnableSelection = xlUnlockedCells
End If

Qualquer coisa da o grito.
Abraço

 
Postado : 05/01/2017 8:28 am
(@vonzuben)
Posts: 549
Prominent Member
Topic starter
 

Sim ela foi bloqueada com vc fez, mas quando você altera o status 1 para aberto a H11 desbloquea

Então está rotina tem que ter, pq H11 será uma cotação com link, pois para o cara usar o link ele paga, se ele nao quer pagar ele coloca no status 2 OC assim apaga a formula que será o link e deixa vazio para ele colocar manualmente.

OBS: Eu coloquei a forma desse jeito apenas para demosntração.

ERRO:
Mas o erro vem do código '--- Uppercase --- na plan2(Lista), sendo se você desativar esse trecho de código, não acontece o erro e se deixo acontece.

Mas para fazer o teste, apaga Maria e coloca em letra minuscula e pressiona Enter, sendo com o codigo --- Uppercase --- na plan2(Lista) acontece o erro
Agora faz mesma coisa sem o código --- Uppercase --- na plan2(Lista) e não terá o erro

Tem alguma coisa nesse trecho de código

 
Postado : 05/01/2017 11:14 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Aí que está o problema... Qualquer célula que alterar na linha vai ficar liberando ou não a fórmula...
Então é para Bloquear ou desbloquear a coluna H somente se for alterada a coluna G?

 
Postado : 05/01/2017 11:31 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não vou mexer muito... Pra mim está realmente dando algumas voltas que não precisam...
Mas acho que resolve esse caso.... Substitui por isso:

Public TempModification As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Linha As String
    
    If TempModification = True Then Exit Sub
    
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    TempModification = True
    
    Call Desprotege
    
    '--- Variavel ---
    Linha = Target.Row
    
    '--- Uppercase ---
    If Not (Application.Intersect(Target, ThisWorkbook.ActiveSheet.Range("C" & Linha)) Is Nothing) Then
        Application.EnableEvents = False
        Target.Value = Application.WorksheetFunction.Proper(Target.Value)
        Application.EnableEvents = True
    End If
    
    ActiveSheet.Cells.Locked = False
    '--- PM ---
    If Range("I" & Linha).Value = "ON" Then
        With ThisWorkbook.ActiveSheet.Range("H" & Linha)
            .FormulaR1C1 = "=IF(RC[-1]=0,0,RC[-3]+RC[-2])"
            .Locked = True
        End With
    ElseIf ThisWorkbook.ActiveSheet.Range("I" & Linha).Value = "OC" Then
        With ThisWorkbook.ActiveSheet.Range("H" & Linha)
            .Value = ""
        End With
        ActiveSheet.EnableSelection = xlUnlockedCells
    End If
    
    Call Protege
    
    TempModification = False
    Application.ScreenUpdating = True
    Application.EnableEvents = True

End Sub

Qualquer coisa da o grito.
Abraço

 
Postado : 05/01/2017 11:41 am
(@vonzuben)
Posts: 549
Prominent Member
Topic starter
 

Deu certo não, pois se eu coloco o cursor na linha 12, desbloqueia na linha 11

Agora não entendi, como que a turma protege em lugar que tem formula, sedo se alguem clicar num celula pode desbloquear ?

 
Postado : 05/01/2017 12:07 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 
Public TempModification As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
Dim wsAtiva As Worksheet
Dim Linha   As Long
   
    If TempModification = True Then Exit Sub
    
    Set wsAtiva = ThisWorkbook.ActiveSheet
    
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    TempModification = True
   
    Call Secure.Desprotege
   
    '--- Variavel ---
    Linha = Target.Row
   
    '--- Uppercase ---
    If Not (Application.Intersect(Target, wsAtiva.Range("C" & Linha)) Is Nothing) Then
        Target.Value = Application.WorksheetFunction.Proper(Target.Value)
        GoTo Finaliza
    End If
    
    '--- PM ---
    With wsAtiva.Range("H" & Linha)
        If wsAtiva.Range("I" & Linha).Value = "ON" Then
            .FormulaR1C1 = "=IF(RC[-1]=0,0,RC[-3]+RC[-2])"
            .Locked = True
        ElseIf wsAtiva.Range("I" & Linha).Value = "OC" Then
            .Value = ""
            .Locked = False
        End If
    End With
   
Finaliza:
    Call Secure.Protege
   
    Set wsAtiva = Nothing
    
    TempModification = False
    Application.ScreenUpdating = True
    Application.EnableEvents = True

End Sub

Qualquer coisa da o grito.
Abraço

 
Postado : 05/01/2017 12:29 pm
(@djunqueira)
Posts: 0
New Member
 

=INDIRETO("B"&LIN() - 1 )+1

INDIRETO() é considerado uma das funções mais lentas do Excel, pq vc simplesmente não faz:

=B10+1

 
Postado : 06/01/2017 12:06 am
(@vonzuben)
Posts: 549
Prominent Member
Topic starter
 

Deu certo Bernado !
O erro você tratou com o Go TO Finaliza ? Só pra mim entender sobre !

 
Postado : 08/01/2017 9:19 pm
(@vonzuben)
Posts: 549
Prominent Member
Topic starter
 

=INDIRETO("B"&LIN() - 1 )+1

INDIRETO() é considerado uma das funções mais lentas do Excel, pq vc simplesmente não faz:

=B10+1

wsAtiva.Cells(11, 2).FormulaLocal = "=indireto(" & """" & "B" & """" & "&lin() - 1 )+1"

Isso acima por isso ?

wsAtiva.Cells(11, 2).FormulaLocal = B10+1
 
Postado : 08/01/2017 9:22 pm
(@vonzuben)
Posts: 549
Prominent Member
Topic starter
 

=INDIRETO("B"&LIN() - 1 )+1

INDIRETO() é considerado uma das funções mais lentas do Excel, pq vc simplesmente não faz:

=B10+1

Coloquei esse =B+10 e faz somente isso

1
1
1
e não assim
1
2
3

 
Postado : 08/01/2017 9:30 pm
(@djunqueira)
Posts: 0
New Member
 
wsAtiva.Cells(11, 2).FormulaLocal = "=LIN()-10"
 
Postado : 08/01/2017 10:43 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Deu certo Bernado !
O erro você tratou com o Go TO Finaliza ? Só pra mim entender sobre !

Na verdade não. O GoTo que coloquei é só para agilizar um processo do código.

ActiveSheet.Cells.Locked = False

Essa linha desprotege todas as células da planilha ativa.

Qualquer coisa da o grito.
Abraço

 
Postado : 09/01/2017 6:17 am