Pergunte aqui
1

Atualizar lista de ComboBox

perguntadas 2019-09-25 20:25:33 +0200

imagem do gravatar de vitor alves

updated 2019-09-27 13:28:01 +0200

Tenho uma macro que adiciona dados à lista de uma ComboBox/Caixa de combinação em uma planilha, fora de um diálogo. Coloquei para ativar a macro sempre que seleciono o Combobox, porém a listagem está se repetindo pelo fato de não atualizar, e sim, adicionar dados.

Creio que tenha duas saídas: ou a própria macro atualiza a listagem em vez de apenas adicionar, ou cria-se outra macro para limpar a listagem quando a combobox perder o foco. Entretando, não sei nenhuma das duas hehe.

Segue a macro:

Sub ProcurarNomes()
Dim Inc as Integer
Dim sItem as String
Dim oComboBox As Object
Dim oCurs As object
Dim LastRow&
Dim oCelula As Object, oCmbox As Object, oSheet As Object 

oSheet = ThisComponent.Sheets.getByName("ALFA") 'Planilha em uso'
oForm = oSheet.DrawPage.Forms(0) '1° Formulário'
oCmbox = oForm.getByName("ProcurarNomes") 'Nome do combobox'
Combobox = ThisComponent.getCurrentController.getControl( oCmbox )

oCurs = oSheet.createCursor()
oCurs.gotoEndOfUsedArea(False)
LastRow = oCurs.getRangeAddress().EndRow + 1

For Inc = LastRow to 6 step -1  
  sItem = oSheet.getCellByPosition( 1,Inc ).String
  oCombobox.additem( sItem,0 )
Next Inc
End Sub

Tentei usar oCombobox.Model.removeAllItems mas quando rodo a primeira macro novamente, continua repetindo a listagem (ex: se a primeira macro for executada 4x, a listagem da ComboBox aparecerá repetida 4x).

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

1 Resposta

1

respondidas 2019-09-26 23:26:22 +0200

imagem do gravatar de vitor alves

updated 2019-09-28 17:51:40 +0200

Resolvido. Encontrei uma solução e adicionei a macro quando a ComboBox perde o foco, assim, evita que a lista fique inserindo dados repetidos e aumentando. Segue a macro:

Sub excluirNomes()
Dim oDoc As Object
Dim Inc as Integer
Dim oComboBox As Object, nCount as string
Dim oCurs As object
Dim LastRow&
Dim oCelula As Object, oCmbox As Object, oSheet As Object 

oSheet = ThisComponent.Sheets.getByName("ALFA") 'Planilha em uso'
oForm = oSheet.DrawPage.Forms(0) '1° Formulário'
oCmbox = oForm.getByName("ProcurarNomes") 'Nome do combobox'
oCombobox = ThisComponent.getCurrentController.getControl( oCmbox )

nCount = oCombobox.getItemCount()
oCombobox.removeItems(0,nCount)

end sub

ATUALIZAÇÃO! Encontrei outra macro para apenas alterar o intervalo de origem da caixa de combinação (ATUALIZA A LISTA). Modifiquei ela para que a última linha fosse alterada de acordo com as alterações de dados da planilha. Coloquei para rodar quando foca na combobox, e ela não cria lista com dados duplicados nem precisa de macro para excluir lista, pois ela altera apenas o intervalo de células de origem (Controle de Formulários/ Controle/ Dados/ Intervalo de células de origem). Segue a macro:

Sub quadroLista()
Dim oFormulario As Object
Dim olstNomes As Object
Dim oDirCeldaVinculada As Object
Dim oRangoOrigen As Object
Dim mOpc(0) As New "com.sun.star.beans.NamedValue"
Dim oVinculo As Object
Dim oCurs As object
Dim LastRow&

oCurs = ThisComponent.Sheets.getByName("ALFA").createCursor() 'NOME DA PLANILHA'
oCurs.gotoEndOfUsedArea(False)
LastRow = oCurs.getRangeAddress().EndRow + 1

oFormulario = ThisComponent.getCurrentController.getActiveSheet.getDrawPage.getForms.getByName("Formulário") 'NOME DO FORMULÁRIO DO COMBOBOX'
olstNomes = oFormulario.getByName( "ProcurarNomes" ) 'NOME DO COMBOBOX'

'ESTABELECEMOS O INTERVALO DE ORIGEM'
oRangoOrigen = ThisComponent.getCurrentController.getActiveSheet.getCellRangeByName("B7:B" & LastRow & "").getRangeAddress 'INICIO INTERVALO'
mOpc(0).Name = "CellRange"
mOpc(0).Value = oRangoOrigen
'CRIANDO VINCULO'
oVinculo= ThisComponent.createInstanceWithArguments("com.sun.star.table.CellRangeListSource", mOpc())
'VINCULAMOS AO QUADRO DA LISTA'
olstNomes.setListEntrySource( oVinculo )
End Sub
editar assinalar como ofensivo Excluir Link mais
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2019-09-25 20:25:33 +0200

Lidas: 21 vezes

Última atualização: Sep 28