Ir ao conteúdo

Posts recomendados

Postado

Olá pessoal sou iniciante no Calc ooo Basic.

Quero que ao selecionar qualquer uma célula da planilha sua linha e coluna altere a cor de fundo.

Gostaria de ajuda passo a passo desde o momento em que crio a planilha.

Consegui fazer isso no excel funciona legal.

Se alguém puder me ajudar fico muito grato.

Postado

Boa noite,

 

Para facilitar, você poderia disponibilizar uma planilha (aquivo .ods) com dados de exemplo e o resultado esperado.

 

[]s

TianK

Postado

Olá Tiank.

Quero fazer um código que faça o seguinte:

Quando a célula "A10" receber o foco a linha 10 e coluna "A" mude a cor de fundo.

Quando a célula "AB5" receber o foco a linha 5 e coluna "AB" mude a cor de fundo.

O código até sei como me virar, agora onde coloco o código. É bem coisa de iniciante.

Obrigado.

Exemplo.ods

Postado

@daniellopes2006,

 

Se o arquivo é novo, é preciso criar um módulo dentro da biblioteca padrão (standard) do mesmo para receber o código:

  1. No menu "Ferramentas" vá em "Macros" > "Organizador de Macros" > "LibreOffice Basic..."
  2. No Diálogo que surgir, selecione o nome do arquivo em "Macro de" e depois o botão "Novo"
  3. Será sugerido "Module1". Renomeei ou deixe como está.
  4. Será aberta a IDE do LibreOffice Basic.

 

Especificamente para o que você quer, é necessário atribuir o código ao evento "Seleção alterada" da planilha:

  1. Aba da Planilha > "Eventos de Planilha..." > Evento "Seleção Alterada" > Botão "Macro"
  2. Em Biblioteca navegue até o "Module1" do arquivo e selecione a macro.
    Sempre que uma nova célula for alterada, o Calc disparará a rotina.

 

Minha sugestão de código:

' Variáveis globais
Global gCol, gLin

Sub MudarFundo( oEv )
' Atribuir ao Evento de Planilha: Seleção alterada
On Error GoTo SairErro

	If Not isEmpty(gCol) Then
	   Call LimparFundoSelecaoAntiga
	End If
	
	oCol = oEv.Columns.getByIndex(0)
	oLin = oEv.Rows.getByIndex(0)
	
	oCol.CellBackColor = RGB( 255,255,0 )
	oLin.CellBackColor = RGB( 255,255,0 )
	
	gCol = oCol
	gLin = oLin

SairErro:
End Sub

Sub LimparFundoSelecaoAntiga
	
	gCol.setPropertyToDefault("CellBackColor")
	gLin.setPropertyToDefault("CellBackColor")

End Sub

 

[]s.

TianK

 

Exemplo_com_macro.ods

  • Curtir 4
  • Amei 1
Postado

@TianK,

 

Eu não entendo nada dessas programações, mas conseguiu inserir essa macro com a ajuda das suas explicações detalhadas.

 

Inclusive, consegui fazer uma alteração para destacar apenas a linha, no lugar de linha e coluna.

 

Mas na minha planilha existem algumas formatações condicionais que alteram o plano de fundo da linha e, acho que por isso, a macro não funciona nessas linhas.

 

Será que você poderia ajudar um analfabeto de programação e fazer um código que também destacasse essas linhas com formatação condicional cuja célula estivesse sendo selecionada no momento. Claro que ao clicar numa célula de outra linha, a formatação condicional voltaria.

 

Utilizo o Apache OpenOffice 4.1.2.

 

Vou mandar o arquivo para você por mensagem.

 

Grato pela atenção.

 

Postado

@LENIO,

 

Não recebi sua planilha. Talvez fosse mais interessante você alterar os dados, editar sua postagem e inserir o arquivo. Assim mais pessoas poderiam dar uma olhada.

 

[]s.

TianK

Postado

Olá @TianK, aproveitando o assunto em questão, teria como disponibilizar o código para que somente a célula selecionada mude a cor de fundo para amarelo; e ao clicar em outra célula, a anterior voltar a cor normal? Uso o LibreOffice Calc v4.1.4.2. A propósito, qual a linguagem de programação usada na criação das Macros do LibreOffice? Saberia dizer se teria outras formas, além da criação de Macro, para este fim? Obrigado.

Postado

@TianK Usei o código que você postou acima e recebi o seguinte erro ao clicar em qualquer célula:

 

Ocorreu um erro de Scripting Framework durante a execução do script Basic vnd.sun.star.script:Standard.Module1.Main?language=Basic&location=document.

Mensagem: The following Basic script could not be found:
library: 'Standard'
module: 'Module1'
method: 'Main'
location: 'document'

 

Postado
Em 12/05/2016 às 12:43, k_dantas disse:

[...] teria como disponibilizar o código para que somente a célula selecionada mude a cor de fundo para amarelo; e ao clicar em outra célula, a anterior voltar a cor normal?

Façamos o seguinte: você disponibiliza um arquivo de exemplo, com dados com a formatação e o resultado desejado, como fizeram os outros,  e eu vejo o que pode ser feito quanto a adaptar o código. Alterar a cor de fundo da célula selecionada para amarelo é tranquilo, agora "voltar a cor normal" dependerá de como você está pensando em formatar as células.

 

 

Em 12/05/2016 às 12:43, k_dantas disse:

[...] A propósito, qual a linguagem de programação usada na criação das Macros do LibreOffice? Saberia dizer se teria outras formas, além da criação de Macro, para este fim?

A linguagem que estamos usando neste tópico é chamada LibreOffice Basic ou OpenOffice Basic (Se estiver usando o Apache OpenOffice). Ela é derivada da linguagem Basic, preservando desta as principais características: tipos de dados, sintaxe, funções internas, operadores, comandos, etc. Mas é possível programar macros com outras linguagens: Python, JavaScript, Java e BeanShell.

Quanto a outra questão, desconheço outro método de se alterar o fundo da célula selecionada.

 

 

Em 12/05/2016 às 20:00, k_dantas disse:

@TianK Usei o código que você postou acima e recebi o seguinte erro ao clicar em qualquer célula:

[...]

Esse erro diz que o LibreOffice tentou chamar a macro "Main", mas a mesma não existe no módulo "Module1" na biblioteca "Standard".

Para contornar o erro é preciso que você refaça os passos que indiquei na minha primeira resposta, certificando-se de seguir a ordem: (a) colar o código no módulo (após criá-lo) e (b) atribuir o evento de planilha "Seleção alterada" a macro "MudarFundo".

 

 

[]s.

TianK

Postado
Em 15/05/2016 às 11:24, TianK disse:

Façamos o seguinte: você disponibiliza um arquivo de exemplo, com dados com a formatação e o resultado desejado, como fizeram os outros,  e eu vejo o que pode ser feito quanto a adaptar o código. Alterar a cor de fundo da célula selecionada para amarelo é tranquilo, agora "voltar a cor normal" dependerá de como você está pensando em formatar as células.

[]s.

TianK

Olá TianK, estou anexando a planilha que desejo mudar a cor de fundo da célula, conforme for clicada. As únicas células que mudarão a cor de fundo são: B83, E83 e G83, pois eu irei bloquear a planilha com exceção dessas três células. Quando eu clicar na célula B83 para inserir um dado, ela mudará a cor de fundo para amarelo. Quando eu clicar na célula E83, elá mudará a cor de fundo para amarelo e a B83, volta a cor natural. E assim por diante.

Tabela de Atualização Monetária.ods

  • 2 anos depois...
Postado

Boa noite Pessoal!

 

Eu gostaria de um código que selecionasse apenas as linhas ativas da tabela e não a linha inteira, como mostrado nas mensagens anteriores. Alguém sabe como fazer? Por exemplo colunas A a F.

  • 7 meses depois...
Postado
Em 29/04/2016 às 12:27, TianK disse:

@daniellopes2006,

 

Se o arquivo é novo, é preciso criar um módulo dentro da biblioteca padrão (standard) do mesmo para receber o código:

  1. No menu "Ferramentas" vá em "Macros" > "Organizador de Macros" > "LibreOffice Basic..."
  2. No Diálogo que surgir, selecione o nome do arquivo em "Macro de" e depois o botão "Novo"
  3. Será sugerido "Module1". Renomeei ou deixe como está.
  4. Será aberta a IDE do LibreOffice Basic.

 

Especificamente para o que você quer, é necessário atribuir o código ao evento "Seleção alterada" da planilha:

  1. Aba da Planilha > "Eventos de Planilha..." > Evento "Seleção Alterada" > Botão "Macro"
  2. Em Biblioteca navegue até o "Module1" do arquivo e selecione a macro.
    Sempre que uma nova célula for alterada, o Calc disparará a rotina.

 

Minha sugestão de código:


' Variáveis globais
Global gCol, gLin

Sub MudarFundo( oEv )
' Atribuir ao Evento de Planilha: Seleção alterada
On Error GoTo SairErro

	If Not isEmpty(gCol) Then
	   Call LimparFundoSelecaoAntiga
	End If
	
	oCol = oEv.Columns.getByIndex(0)
	oLin = oEv.Rows.getByIndex(0)
	
	oCol.CellBackColor = RGB( 255,255,0 )
	oLin.CellBackColor = RGB( 255,255,0 )
	
	gCol = oCol
	gLin = oLin

SairErro:
End Sub

Sub LimparFundoSelecaoAntiga
	
	gCol.setPropertyToDefault("CellBackColor")
	gLin.setPropertyToDefault("CellBackColor")

End Sub

 

[]s.

TianK

 

Exemplo_com_macro.ods

Ótima Macro, porém acredito que melhor do que entregar o peixe é ensinar a pescar. Será que você poderia explicar como funciona essa sua macro?

  • 2 anos depois...

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...