Boa noite, é possível classificar um listbox via macro sem que seja vinculado a intervalo de célula, mas sim direto no objeto com os dados já inseridos. Desde já agradeço.
Oi @RonaldoElias, tudo bem?
Voce consegue colocar aqui a versão do seu sistema operacional, a versão do seu LibreOffice (Ajuda > Sobre o LibreOffice > Informações da Versão (clica nas 2 folhas e depois vem aqui, por favor, e cola a informação).
@RonaldoElias , acredito que a classificação só é possível utilizando Controle de Tabelas, pois pesquisei bastante e até agora não encontrei nenhuma referência, mas vamos esperar o posicionamento do @elmau , pois ele conhece os objetos como a palma da mão .
O que “exactamente” devemos entender por classificar?
Um exemplo claro do que deseja ajudará quem o quiser ajudar.
Ordenar em forma crescente ou decrescente.
@WBastos @RonaldoElias Como a caixa de listas é preenchida? É apenas uma lista de itens de texto? Deseja capturar a lista de itens de texto, colocá-los em uma matriz, classificá-los e colocar a lista classificada de volta na caixa de listas? Precisamos de muito mais informações antes de podermos ajudá-lo.
@James_Zimmerman , A dúvida inicialmente era do @RonaldoElias , mas como o tópico estava aberto resolvi tentar entender também, mas vamos lá…
Podemos tomar como base o preenchimento através de uma matriz capturada de uma lista de uma planilha e posteriormente coloca-la na caixa de listas, como na planilha exemplo abaixo e utilizando o seguinte código:
Option Explicit
'==========================================================
Dim oDlg as Object
Dim lstHerst As Object
Dim mlstHerst As Object
Dim wb As Object
Dim ws As Object
Dim Lin As Long
Dim Arr As Object
Dim i As Long
Dim tmp As Object
'==========================================================
Sub Dlg_Hersteller_bearbeiten
DialogLibraries.loadLibrary("Standard")
oForm = DialogLibraries.Standard.Dlg_Hersteller
oDlg = CreateUnoDialog(oForm)
oDlg.title = "Hersteller bearbeiten"
lstHerst = oDlg.getControl("lstHerst")
mlstHerst = lstHerst.Model
wb = ThisComponent.Sheets()
ws = wb.getByName("Tabelle1")
Call EntradaDados
oDlg.Execute
oDlg.Dispose
End Sub
'==========================================================
Sub EntradaDados
Lin = 1
Do Until ws.getCellByPosition( 0 , Lin ).String = Empty
Lin = Lin + 1
Loop
Arr = ws.getCellRangeByName("A2:D" & Lin ).getDataArray()
Dim liste(UBOUND(Arr()))
For i = 0 To UBOUND(Arr())
tmp = Arr(i)
liste(i) = EspCol(tmp(0) , 20) & EspCol(tmp(1) , 10)
Next i
mlstHerst.StringItemList = liste()
End Sub
'==========================================================
Function EspCol ( iCol , nTam )
EspCol = Left ( iCol & String ( nTam , " " ) , nTam ) & "| "
End Function
Hersteller3c.ods (34.9 KB)
Se disser “ligado a uma série de células”, está a utilizar formulários e não caixas de diálogo.
Será isso correcto?
Como eu disse, um ficheiro de amostra irá ajudar todos nós que tentamos ajudá-lo.
sim, eu vi-o… mas como o colega falou em “ligar células”, fiquei com a dúvida se está a usar formulários.
Por que você está indo com tanto trabalho para escrever uma macro que lança uma janela de diálogo, para que você possa classificar a planilha? Isso pode ser facilmente feito com o botão [Classificar] na barra de ferramentas Calc.
Entendido senhores,
Agora as dúvidas foram esclarecidas, pelo menos para minha pessoa:
Sub EncerramentoDoTopico
Dim sInfo As String
sInfo = MsgBox("Os dados são inseridos diretamente no controle ListBox?" , MB_YESNO , "Prezado usuário" )
If sInfo = 6 Then
MsgBox "Ordene os dados antes de inseri-los no controle" , 64 , "Prezado usuário"
Else
MsgBox "Ordene os dados na tabela" , 64 , "Prezado usuário"
End If
MsgBox "Obrigado a todos pelas contribuições" , 64 , "Agradecimento"
End Sub