Notifications
Clear all

[Resolvido] MACRO CISMOU DE DAR ERRO!!!

4 Posts
2 Usuários
2 Reactions
957 Visualizações
JSCOPA10
(@jscopa10)
Posts: 344
Reputable Member
Topic starter
 

Uso esta Macro em um arquivo do trabalho com 3 níveis de classificação ... agora ajustei ela para 5 níveis, ela cismou em dar erro em Key4 !!! ... Já colei na Plan1 (este arquivo só tem esta Aba), já colei no Módulo, e não vai nem a pau!!!!!!!!!!!!!!!!

Alguma sugestão??? .... (Aliás, porque umas coisas temos que colar na própria Planilha, e outras tem que ser em Módulo????)

 

Sub Classificar()

Range("A2:N1800").Sort _
Key1:=Range("N2"), Order1:=xlAscending, _
Key2:=Range("J2"), order2:=xlAscending, _
Key3:=Range("F2"), order3:=xlAscending, _
Key4:=Range("G2"), order4:=xlAscending, _
Key5:=Range("B2"), order5:=xlAscending, _
Header:=xlYes
MsgBox "Parabens. Tudo Classificado Corretamente!", vbInformation, "Parabéns"
Range("A3").Select

End Sub

 
Postado : 02/10/2020 6:11 pm
JSCOPA10
(@jscopa10)
Posts: 344
Reputable Member
Topic starter
 

@anderson, achei seu código bem complexo!!! ... Muito fora da simplicidade do código que eu postei acima!!! ... Te agradeço, mas vou aguardar outras opiniões!!!!

 
Postado : 02/10/2020 9:28 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 
Boa noite, my friend @jscopa10!
Postado por: @jscopa10

...ajustei ela para 5 níveis, ela cismou em dar erro em Key4 !!!

Isso acontece pq a classificação aplicada sobre o range (Range.Sort) só aceita até 3 chaves de classificação. Para mais do que 3, tem que usar o método Sort em nível de planilha (Worksheet.Sort).

Poderia ficar assim:

Sub Classificar2()
  Dim rgDados As Range: Set rgDados = ActiveSheet.[A1].CurrentRegion
  With rgDados.Worksheet.Sort
    With .SortFields
      .Clear
      .Add Key:=rgDados.Columns("N"), Order:=xlAscending
      .Add Key:=rgDados.Columns("J"), Order:=xlAscending
      .Add Key:=rgDados.Columns("F"), Order:=xlAscending
      .Add Key:=rgDados.Columns("G"), Order:=xlAscending
      .Add Key:=rgDados.Columns("B"), Order:=xlAscending
    End With
    .SetRange rgDados
    .Header = xlYes
    .Apply
  End With
  MsgBox "Parabens. Tudo Classificado Corretamente!", vbInformation, "Parabéns"
  Range("A3").Select
End Sub
 
Postado por: @jscopa10

@anderson, achei seu código bem complexo!!! ...

Ao que parece, o código postado pelo @anderson está assim com redundâncias pq é resultado de gravação de macro (gravando uma macro classificando os dados conforme suas instruções gera código ipsis litteris como o acima).

 

 
Postado : 03/10/2020 12:47 am
LaerteB and JSCOPA10 reacted
JSCOPA10
(@jscopa10)
Posts: 344
Reputable Member
Topic starter
 

@edsonbr, SHOW!!! ... Valeu !!! ........ Resolvido!!!!!!!!!!!!!!!!!

 
Postado : 03/10/2020 11:00 am