Bom dia a todos!
Estou com um pequeno problema de conflito entre 2 códigos e gostaria de pedir a ajuda para resolvê-lo. Talvez o Mauro Coutinho possa me ajudar também.
O primeiro código busca na linha do título da planilha específica pelo caracter "*", ao encontrar faz o bloqueio da coluna onde tem o asterisco. está funcionando perfeitamente bem.
Ao bloquear a coluna, também faz o bloqueio da planilha. Ao bloquear a planilha, o usuário fica sem algumas funcionalidades, principalmente o AUTOFILTRO.
Para resolver o problema do AUTOFILTRO, entra em cena o segundo código, que habilita o AUTOFILTRO em planilhas bloqueadas.
O primeiro código, o de bloqueio, é inserido na planilha a ser bloqueada no evento "Private Sub Worksheet_Activate()".
O segundo código, o do autofiltro, é inserido na planilha "ESTA PASTA DE TRABALHO", pois ele seleciona a planilha a ser habilitado o autofiltro. Ele é ativado no evento "Private Sub Workbook_Open()".
Ocorre que, ao abrir o arquivo o autofiltro é ativado permitindo seu uso, mas ao ativar o bloqueio, pelo ativamento da planilha, o autofiltro volta a ficar indisponível.
Preciso da proteção e também preciso usar o autofiltro. Como resolver?.
Ainda com relação ao código do autofiltro, ele permite apenas a seleção para a filtragem. Caso eu aplique o filtro em mais de uma coluna, para retirar tem que fazê-lo um a um...a opções MOSTRAR TODOS continua indisponível. Poderiam ver isso tanbém?.
Agradeço muito!
Código de bloqueio:
Private Sub Worksheet_Activate()
Dim lgTtColunas As Long
Dim iCol As Long
Dim myCol As String
ActiveSheet.Unprotect ("gplan211127")
Cells.Locked = False
'Conta as colunas preenchidas
lgTtColunas = Cells(1, Columns.Count).End(xlToLeft).Column
For iCol = 1 To lgTtColunas
'Condição
'If Cells(1, iCol).Value = "VALOR ATUAL" Then
If InStr(1, Cells(1, iCol), Chr(42)) > 0 Then
myCol = GetColumnLetter(iCol)
Range(myCol & "1:" & myCol & "318").Locked = True
End If
Next iCol
ActiveSheet.Protect ("gplan211127")
End Sub
Function GetColumnLetter(colNum As Long) As String
Dim vArr
vArr = Split(Cells(1, colNum).Address(True, False), "$")
GetColumnLetter = vArr(0)
End Function
Código do autofiltro:
Private Sub Workbook_Open()
'check for filter, turn on if none exists
With Worksheets("Proposta_Mapp")
If Not .AutoFilterMode Then
.Range("A1").AutoFilter
End If
.EnableAutoFilter = True
.Protect Password:="gplan211127", _
Contents:=True, UserInterfaceOnly:=True
End With
End Sub
Postado : 29/04/2015 7:24 am