Ir ao conteúdo

Posts recomendados

Postado

Olá pessoal!

Preciso classificar alguns dados em uma planilha do Excel. Para isso estava utilizando o método Sort da seguinte forma:

Worksheets("Plan1").Range(Cells(1, 1), Cells(30, 1)).Sort Key1:=Worksheets("Plan1").Range("A1"), Order1:=xlAscending, Header:=xlGuess, _

OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _

DataOption1:=xlSortNormal

Tudo funcionava direitinho até eu ocultar a planilha Plan1. Pesquisei e descobri que o método Sort utilizado desta forma exige que a planhilha que contém os dados que deseja-se classificar esteja ativa.

Tentei então fazer o mesmo criando um objeto Range, mas não consegui:

Sub classificar()

Dim selecao As Range

Set selecao = Worksheets("Plan1").Range(Cells(1, 1), Cells(30, 1))

selecao.Sort

End Sub

Gostaria de saber se há alguma forma de classificar os dados sem que a planilha onde os dados estão esteja ativa, utilizando o Sort ou qualquer outro método. Gostaria ainda de alguns exemplos.

dapalma

Postado

Uma sugestão seria ativar a planilha, classificar e voltar para outra planilha.

Mas dessa maneira você classifica sem ativar a planilha, seria só adaptar:

Sub classificar()
Plan1.Range("A2:AD65000").Sort Plan1.Range("A2"), xlAscending
End Sub

  • Curtir 1
Postado

JoseA,

Obrigado pela resposta. Sobre a sugestão de ativar, classificar e voltar para outra a planilha, é o que eu tenho feito como forma de "quebrar o galho", mas como havia dito, minha intenção mesmo é de ocultar a planilha.

O código que você sugeriu realmente funcionou sem que a planilha estivesse ativa, entretanto quando fui adaptá-lo para o meu programa, deu erro o que me levou a concluir que o problema não seria do método Sort, mas sim da forma como estou selecionando as células.

Como o intervalo a ser selecionado é uma variável, utilizei um código como o do seguinte exemplo:

Sub classificar()

linha_inicial = 1

linha_final = 20

Worksheets("Plan1").Range(Cells(linha_inicial, 1), Cells(linha_final, 1)).Sort Worksheets("Plan1").Cells(linha_inicial, 1), xlAscending

End Sub

Como anteriormente, quando Plan1 está ativa funciona normalmente. Mudando-se a planilha, aparece o seguinte erro: "Erro de definição de aplicativo ou de definição de objeto".

Comprovei que o problema seria a forma de seleção com o seguinte código:

Sub Negrito()

linha_inicial = 1

linha_final = 20

Worksheets("Plan1").Range(Cells(linha_inicial, 1), Cells(linha_final, 1)).Font.Bold = True

End Sub

Planinha ativa funciona, trocando planilha dá o mesmo erro citado anteriormente.

Existe alguma outra forma de eu indicar o intervalo de seleção, sendo que linhas e colunas possam ser variáveis, cumprindo assim o objetivo citado anteriormente?

  • 8 anos depois...
Postado

eu resolvi assim

Sub classificar_colun()
Application.ScreenUpdating = False
Application.CutCopyMode = False
Dim wr As Worksheet
Dim i As Integer, j As Integer, k As Integer, r, ra
Set wr = Sheets("mega")


i = 0
Do While wr.Range("R1").Offset(0, i).Value <> ""
wr.Range(wr.Range("R1").Offset(0, i), wr.Range("R1").Offset(6, i)).Sort _
wr.Range("R1").Offset(0, i), xlDescending
i = i + 1
Loop

End Sub

ele classifica cada uma das colunas preenchidas a direita da celula inicial ate chegar a uma celula vazia ou seja ate que nao haja mais colunas a direita com valores.

Postado
Em 09/08/2009 às 15:41, joseA disse:

Uma sugestão seria ativar a planilha, classificar e voltar para outra planilha.

Mas dessa maneira você classifica sem ativar a planilha, seria só adaptar:

 

 
Sub classificar()
Plan1.Range("A2:AD65000").Sort Plan1.Range("A2"), xlAscending
End Sub

 

Aproveitando o codigo como eu faço se quiser usar mais de 1criterio?

Primeiro a coluna A depois a coluna C por exemplo

Postado

@dapalma , bom dia.

Mesmo sem usar variável você estava quase lá. você acertou quando qualificou o objeto Range em Worksheets("Plan1").Range(...). O único erro é que você deveria ter feito isso também quando usou Cells(...). Como você não usou qualificador, quando ocultou a planilha por ela não estar ativa ocorreu erro. Pra usar com planilhas ocultas/não ativas use: Worksheets("Plan1").Cells(...) ou Plan1.Cells(...) ou ainda With Worksheets("Plan1"):   .Range(.Cells(...)...):  End With.

Então seu código poderia ser:

 

Sub Classificar()
  With Worksheets("Plan1")
   .Range(.Cells(1, 1), .Cells(30, 1)).Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
                                       OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                                       DataOption1:=xlSortNormal
  End With
End Sub

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...