Quero construir uma macro para classificar as PLANILHAS em ordem alfabética, mas não sei qual ou quais funções usar.
Alguém do grupo poderia me ajudar?
Boa noite,
Agora correto, uma macro que classifica as planilhas (abas) em ordem alfabética:
Sub ClassificarAbas
Dim oDoc as Object, oPlanilhas as Object
Dim mAbas as Variant, mOrdem as Variant
'Obter os nomes'
oDoc = ThisComponent
oPlanilhas = oDoc.Sheets
mAbas = oPlanilhas.ElementNames
' Carregar o biblioteca Tools'
If (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) Then
GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
End If
' Função da biblioteca Tools que classifica listas'
mOrdem = BubbleSortList( mAbas )
' Colocar as abas na ordem'
For i = 0 to UBound( mOrdem )
oPlanilhas.MoveByName( mOrdem(i), i )
Next i
End Sub
Atte,
Concordo com o @Gilberto Schiavinatto. Ainda estou estudando a programação do LibreOffice. Começei a utilizá-lo em menos de 01 ano, e a linguagem é bem diferente do que estou acostumado.
Olá, usei esse código do Grafeno, ficou legal. Obrigado gente.
Bom dia,
Vou te passar um código que utilizo para excel, veja se funciona. Obs.: Tentei converter ele para openoffice e não consegui.
Rem Attribute VBA_ModuleType=VBAModule
Option VBASupport 1
Sub OrdenarPlanilhasPelosNomes()
'Código para ordenação das planilhas de uma pasta de trabalho com base nos seus nomes
Dim k As Integer
Dim i As Integer
Dim Tipo As Integer
Dim Mensagem As String
'Exibir caixa de mensagem para que o usuário possa selecionar o tipo de ordenação desejada
Mensagem = "Pressione Sim para ordenação crescente" & vbLf & _
"e Não para ordenação decrescente"
Tipo = MsgBox(Mensagem, vbYesNo + vbApplicationModal, _
"Ordenar planilhas")
Select Case Tipo
Case vbYes
'Opção de ordenação crescente
For k = 1 To ThisWorkbook.Sheets.Count
For i = 1 To ThisWorkbook.Sheets.Count - 1
If Sheets(i).Name > Sheets(i + 1).Name Then
Sheets(i + 1).Move Before:=Sheets(i)
End If
Next i
Next k
Case vbNo
'Opção de ordenação decrescente
For k = 1 To ThisWorkbook.Sheets.Count
For i = 1 To ThisWorkbook.Sheets.Count - 1
If Sheets(i).Name < Sheets(i + 1).Name Then
Sheets(i + 1).Move Before:=Sheets(i)
End If
Next i
Next k
End Select
End Sub
Fiz os testes no libreoffice que eu utilizo e deu certo
Ok Funciona
Olá Grafeno, primeiro obrigado pela disposição, essa classificação que você está me propondo é dentro da planilha.
Estou querendo classificar as planilhas mesmo. Por exemplo você cria as planilhas de nomes:
“arquivo”, “vidro”, “armários” e “ruas”.
Quero que ao rodar a macro elas fiquem ordenadas em ordem alfabética, como:
“armários”, “arquivo”, “ruas” e “vidro”.
Então não interessa o que tem no conteúdo das planilhas e sim seus nomes.
Estou com uma ideia, mas acho que é muito primária, gostaria de ter mais ideia para ver se consigo fazer uma coisa boa e rápida.
Obrigado pela ajuda, conto com você abraço.