Foco nos Controles Planilha Calc

Boa noite

Alguns controles das Planilhas executam Macro

Gostaria de poder disparar seus eventos utilizando teclas de atalho

Em alguma linguagens usamos colocar ou destacar alguma letras no caption desses Botões

Como fazer isso nos controles do Calc ?

Obg

@MarcoSalles, aqui no Ask, num sistema de Pergunta&Resposta, ao invés de colocar < Resolvido > no título, aceite a resposta do @Gilberto Schiavinatto como correta, clicando na bolinha com " √ " na resposta.

Não aconselho teclas de atalho, elas são para uso geral, não ficam gravadas no arquivo e sim no Calc.

Aconselho usar Nenu ou Barra de ferramenta ( Menu acho mais pratico )

Vide artigos publicados, sobre estes assuntos, da Revista LibreOffice Magazine.

Menus => https://www.schiavinatto.com/mundolibre/criando-menu-personalizado_lm20.html

Barras de ferramentas => https://www.schiavinatto.com/mundolibre/barra-de-ferramentas-personalizada_lm21.html

Na criação escolha salvar no arquivo, assim toda vez que abrir o arquivo aparecera o Menu.

Complemento

@MarcoSalles, vai a atualização por imagem, mudou-se a versão do LibO e as telas…

Considerando que já tem o Arquivo e as macros…

Selecionar o Arquivo (item (2)) que usara este Menu, assim onde for o Arquivo, o Menu acompanha…

As setas “para cima e para baixo” são para alterar a posição do Menu…
Descrição da imagem

O item (4) é opcional, caso queira Renomear o item no Menu…

Muito obrigado pelas sugestões dos artigos , acho que resolvera este problemas . Irei lê-lo e implementa-lo

Tudo bem Gilberto . Então li os dois artigos e muito bem explicados porém por desconhecimento da ferramenta não consegui implementar nenhum dos dois . Não sei se é versão mas o meu LibOffice não tem a instruçao

SALVAR EM

Não consegui seguir adiante

Pode ajudar-me

Qual SO e Versão do LibO ?

Boa tarde . É a Versão: 6.1.4.2 (x64)

É possivel gravar teclas de atalho no arquivo. O atalho só será funcional quando o arquivo estiver aberto.

Obg pelas resposta mas como fazer isso ? pois o Tutorial excelente bem explicativo do Gilberto parece ser incompatível com a versão 6.1.4.2 do Libreoffice

@MarcoSalles, vide Complemento na resposta acima.

Brilhante . excelente mesmo . Só que tem uma pequena dúvida . Alguns Macros necessitam da Planilha
esta ativa . Por exemplo a De Vendas tem um Macro que atualiza as Vendas . Porem na Barra de ferramenta tem a ação para atualizar a Venda ( O Ideal que respectivas Açoes do Menu aparecem ou
ficassem habilitadas segundo algum critério) . Neste Tutorial da para fazer isso ???
Outra solução é que antes de executar o restante do código eu verificasse qual planilha que eu estou

Veja um segmento do código

'Obter a Planilha Ativa e a Tabela Dinâmica
PlanAtiva = ThisComponent.getCurrentController.getActiveSheet()
TabDinam1 = PlanAtiva.DataPilotTables.getByIndex(0)

O Problema é executar a ação em uma planilha que não tem uma Tabela -->>> RETORNARÁ ERRO

A planilha que executa esse código no meu caso é a planilha Atualiza as Vendas

Poderia testar antes de executar o código acima se a Planilha ativa é a Planilha “Atualiza Venda”

Como seria este IF ???

Obg

Se a macro só deve funcionar em uma determinada aba, nesta aba nomeie uma célula, e no inicio desta macro direciona para ir para esta célula nomeada.

Pode usar esta como submacro:

'================================================|
sub IrPara (xlocal as string)
'exemplo uso: IrPara "Planilha.A1" ou "Planila1.A1:B3" ou "NomeArea"
'================================================|
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = xlocal
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
End sub

Na sua macro acrescente o comando

Call IrPara "CelulaNomeada"

Desta maneira a submacro pode ser usada infinita vezes.

Caso queira, contato direto: gilberto@schiavinatto.com e/ou gilbertoschiavinatto@yahoo.com.br

Entendi porém não é querer ir … Se usar o Meni Criado e tiver uma AÇÂO que execute um Macro que necessita de uma planilha ativa o usuário ou qq pessoa que esteja usando o Documento pode por descuido clicar nesta Ação inoportuna
A solução para isso eu acredito ser

  1. Desabilitar as actions em Planilhas diferentes
  2. Fazer um IF para não executar essas Actions qnd não for o caso
    3)Sempre levar atraves do código acima para essas Planilhas , porem não acho a melho idéia pois como eu disse foi
    um DESCUIDO

obg

Como desabilitar o Menu Criado, se não for para a planilha, creio que é possível, porém saiu do meu nível.

Uma maneira de contornar, seria não ter o Menu e sim um Botão na planilha correspondente, assim só teria acesso ao botão se estiver na planilha correspondente, e por segurança, incluir na Macro, a famosa pergunta, Tem certeza ? se Sim é executado se Não é abortado.

Obg … Então , ja tenho o botão , porém o uso do Botão requer mouse por outro ladoas AÇOES DE MENU requer teclado devido aos ALT + Letras ( Tecla de atalho ) …
Agora qual a instrução que testa com o IF a Palnilha ativa
acho que posso colocar no Macro
Assim so continua a excecução se a planilha estiver ativa
obg

IF a Planilha Vendas Ativa
continua
else
aborta

obg

**Segue um exemplo de Macro para conferir a Planilha ativa.

Acione esta macro, se a planilha estiver certa executa, caso contrario aborta.**

'================================================|
Sub ConferePlanilhaAtiva
'================================================|
Dim PlanAtiva As Object
Dim Var1 As Object
	PlanAtiva = ThisComponent.getCurrentController.getActiveSheet()

	If PlanAtiva.getName = "NomeDaPlanilha" Then
	
		Call NomeDaSuaMacro   'Chamada para a sua Macro. Ou elinine esta linha
								' e dicione a sua macro aqui.
							
	Else
	
		MsgBox "Acionou a Macro na Planilha errada.", 16, "A T E N Ç Ã O"

	End If

End Sub

Fechou Gilberto

So alterei que usei passagem por referencia e Function

function ConferePlanilhaAtiva(ByVal cNomeDaPlanilha As String) As Boolean
'================================================|
Dim PlanAtiva As Object
Dim Var1 As Object
    PlanAtiva = ThisComponent.getCurrentController.getActiveSheet()

    If PlanAtiva.getName = cNomeDaPlanilha Then
        ConferePlanilhaAtiva = True

    Else
        MsgBox "Acionou a Macro na Planilha errada.", 16, "A T E N Ç Ã O"
         ConferePlanilhaAtiva = False
    End If

End Function

Assim eu reaproveito-a melhor

chamo assim dentro da Macro

If not ConferePlanilhaAtiva("Atualizar_Media_Vendas") Then
 exit sub
end If

.

iF MsgBox("Deseja Salvar os Dados na Tabela Vendas ?" ,1) <> 1 then
  Exit Sub
End IF

… Segue o código da Macro

Finalizo o tópico e te agradeço pela paciência. caso alguém necessite pode reabri

Muito boa a function

Caso a resposta atendeu sua necessidade, por gentileza, click na bolinha Descrição da imagem a esquerda da resposta, para finalizar a pergunta.