Caixa de listagem no Calc

Em uma Caixa de listagem com 7 seleções ( seleção 0 a 6 ), ao acionar cada seleção ir para determinado local da planilha.

Descrição da imagem

É possível fazer diretamente na Caixa de listagem ou é necessário macros .


Oi @Grafeno, desta maneira conheço, gostaria de endender como funciona em “Caixa de listagem” veja o exemplo “Burger Factory”.

@Gilberto Schiavinatto, ok então. Mas estes locais estão dentro de uma mesma planilha (p. ex. são nomes de intervalos) ou são guias (planilhas) diferentes. Se forem guias diferentes, haverá uma caixa de listagem similar em cada uma?

E isso @Grafeno, pode ser intervalos ou abas (aqui a caixa seria duplicada nas abas), por enquanto é para descobrir como montar, para possível uso futuro. Sei que com o Open/LibreOffice é possível montar aplicativos excelentes, veja esta mexicana em https://facturalibre.net,

@Gilberto Schiavinatto, completei minha resposta para incluir uma solução por macro. Espero que seja de ajuda!

Esta “fatura livre” do mexicano Mauricio Baeza é um excelente exemplo do que é possível fazer com o Calc e programação Basic. Outra contribuição sensacional deste é seu livro Aprendiendo OOoBasic. Inclusive o capítulo 10 é um passo a passo da construção dessa “fatura libre”.

Olá,


Na caixa de listagem é preciso macro, mas existem alternativas que dispensam código como:
O controle **Botão de Pressão** pode abir links também, desde que se alterem duas de suas propriedades para:
  • Ação: “Abrir documento/página da Web”
  • Link:#Início.A1” (Exemplo: irá para/selecionará a planilha “Início” célula “A1”)

Com macro (complemento da resposta):


A macro abaixo deve ser associada ao evento " **Alterado** " das caixas de listagem **lstLocais** de **cada guia** (aba) de planilha, assumindo que:
  • o conteúdo da caixa de listagem refere-se a nomes de planilhas (guias);
  • cada planilha terá uma réplica da caixa de listagem lstLocais.

Sub lstLocais_Alterado( oEvento ) ' Caixa de Listagem > Eventos > Alterado
Dim olstLocais As Object, olstLocaisView As Object
Dim oDoc As Object, oControlador As Object
Dim oPlanDestino As Object
Dim sAtual As String, sEscolha As String

   ' Obter o Controlador
   oDoc = ThisComponent
   oControlador = oDoc.CurrentController
   
   ' Nome da planilha atual
   sAtual = oControlador.getActiveSheet.Name

   ' Model (Modelo) do Listbox que disparou o evento
   ' Model descreve a aparência, o comportamento
   ' e apresenta os dados do controle
   olstLocais = oEvento.Source.Model
   ' Escolha do usuário no listbox 
   sEscolha = olstLocais.CurrentValue
   ' Se escolher a planilha atual não fazer nada
   If sEscolha  = sAtual Then Exit Sub   
   
   ' View (Visão) do Lisbox que disparou o evento
   ' View é o que usuário vê do controle e
   ' por onde interage através do(s) controlador(es)
   olstLocaisView = oControlador.getControl( olstLocais )
   ' Retornar a seleção para a planilha atual "antes de sair"
   olstLocaisView.selectItem( sAtual,True )
   
   ' Ir para planilha escolhida
   oPlanDestino = oDoc.Sheets.getByName( sEscolha )
   oControlador.setActiveSheet( oPlanDestino )   
End Sub


Atte,

Ver complemento na pergunta.

Perfeito @Grafeno, da maneira que fez é super pratico, a única atenção necessária é o item da caixa ser o nome da aba. Eu com minhas restrições de programação havia rascunhado uma cascata de If Then Else nada pratica. Obrigado pela atenção.