- 02 Out 2018 às 23:04
#37450
Boa noite, pessoal.
Tenho um código que utilizo no botão "OK" de um formulário de uma planilha e ao clicar ele funciona perfeitamente.
Basicamente, essa parte do código em questão, tem como ações (sempre nessa ordem):
1) ordena/filtra por data (recente para a mais antiga);
2) depois ele faz a numeração da coluna cadastro usando LIN()- LIN(célula acima);
3) ordena a coluna de cadastro do maior(topo da tabela) para o menor (última linha da tabela)
4) ordena de novo por data, da mais recente (topo da tabela) para a mais antiga (final da tabela)
5) e, por último, ordena a coluna de nomes em ordem alfabética.
Pensei em utilizar esse código no evento Initialize do formulário mas não funciona. Pensei em fazer isso pq alguns registros podem ser apagados manualmente na tabela e com isso seriam sempre reorganizados ao iniciar o formulário.
Alguém poderia me ajudar em como proceder?
Como eu melhoria a escrita do código (fiz com a ajuda do gravador de macros e não sei se todas as linhas são necessárias).
Segue planilha para testes.
Obrigado e boa noite.
Tenho um código que utilizo no botão "OK" de um formulário de uma planilha e ao clicar ele funciona perfeitamente.
Basicamente, essa parte do código em questão, tem como ações (sempre nessa ordem):
1) ordena/filtra por data (recente para a mais antiga);
2) depois ele faz a numeração da coluna cadastro usando LIN()- LIN(célula acima);
3) ordena a coluna de cadastro do maior(topo da tabela) para o menor (última linha da tabela)
4) ordena de novo por data, da mais recente (topo da tabela) para a mais antiga (final da tabela)
5) e, por último, ordena a coluna de nomes em ordem alfabética.
Pensei em utilizar esse código no evento Initialize do formulário mas não funciona. Pensei em fazer isso pq alguns registros podem ser apagados manualmente na tabela e com isso seriam sempre reorganizados ao iniciar o formulário.
Código: Selecionar todos
Porém esse código não roda no evento Initialize do formulário.Private Sub UserForm_Initialize()
Me.Height = Int(0.9 * ActiveWindow.Height) 'Ajusta a altura do formulário
Me.Width = Int(0.9 * ActiveWindow.Width) 'Ajusta a largura do formulário
Dim Tabela As ListObjects
Set Tabela = wshCadastro.ListObjects("TB_Clientes")
Tabela.Sort. _
SortFields.Clear
Tabela.Sort. _
SortFields.Add Key:=Range("TB_Clientes[[#All],[Data]]"), SortOn:= _
xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With Tabela.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("TB_Clientes[Cadastro]").FormulaR1C1 = _
"=LIN()-LIN(TB_Clientes[[#Cabeçalhos],[Cadastro]])"
Range("TB_Clientes[Cadastro]").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Tabela.Sort. _
SortFields.Clear
Tabela.Sort. _
SortFields.Add Key:=Range("TB_Clientes[[#All],[Cadastro]]"), SortOn:= _
xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With Tabela.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Tabela.Sort. _
SortFields.Clear
Tabela.Sort. _
SortFields.Add Key:=Range("TB_Clientes[[#All],[Data]]"), SortOn:= _
xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With Tabela.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Tabela.Sort.SortFields.Clear
Tabela.Sort. _
SortFields.Add Key:=Range("TB_Clientes[[#All],[Nome]]"), SortOn:= _
xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With Tabela.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Tabela.Sort.SortFields.Clear
Tabela.ListRows(1).Range(1, 1).Select
Application.CutCopyMode = False
Set Tabela = Nothing
End Sub
Alguém poderia me ajudar em como proceder?
Como eu melhoria a escrita do código (fiz com a ajuda do gravador de macros e não sei se todas as linhas são necessárias).
Segue planilha para testes.
Obrigado e boa noite.
Você não está autorizado a ver ou baixar esse anexo.