Boa tarde, amigos.
É o seguinte: tenho um conjunto de dados formatados como tabela que são gerados após informar alguns critérios num form. Após serem gerados preciso contar o total de registros não únicos. Para isso utilizei numa célula a fórmula =SOMA(SE(FREQÜÊNCIA(CORRESP(B14:B2000;B14:B2000;0);CORRESP(B14:B2000;B14:B2000;0))>0;1)). Ela até funciona, porém se houver células vazias no intervalo não dá certo. Outro problema é que após filtrar os dados da tabela o resultado da fórmula permanece o mesmo (tentei usar a função Subtotal ao invés da Soma mas não deu certo). Então parti pra VBA e fiz o código abaixo:
Function CONTAR_ÚNICOS()
Dim lng_linha As Long
Dim intervalo As Range
Application.ScreenUpdating = False
'desproteger planilha
ActiveSheet.Unprotect ("***")
Range("Tabela5[[#Headers],[Matrícula]]").Select
Range("B13:B2000").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("G13"), Unique:=True
ultima_linha = Sheets("Relatorio_Faltas").Cells(Rows.Count, "G").End(xlUp).Row
Set intervalo = Sheets("Relatorio_Faltas").Range("G14" & "G" & ultima_linha)
Columns("G:G").Select
Selection.Delete Shift:=xlToLeft
Range("Tabela5[#Headers]").Select
Selection.AutoFilter
ActiveSheet.ListObjects("Tabela5").Range.AutoFilter Field:=1, Criteria1:="<>"
Range("A6:F6").Select
ActiveSheet.Protect ("***"), DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True 'proteger planilha
Application.ScreenUpdating = True
CONTAR_ÚNICOS = WorksheetFunction.Sum(intervalo)
End Function
Ele copia os valores únicos para uma coluna auxiliar utilizando o filtro avançado e depois retorna o total de registros únicos. Feito isso inseri a função criada numa célula, mas sempre retorna o valor 0. Quando mudo passo o código para um procedimento ao invés de função funciona.
A minha pergunta é: como chamar esse procedimento sempre que o filtro de qualquer coluna da tabela for utilizado?
Grato pela atenção!
Postado : 16/04/2014 9:35 am