Pergunte aqui
1

Macro para formatação condicional

perguntadas 2017-10-28 19:40:36 +0200

imagem do gravatar de Leandro Vieira

updated 2017-10-28 22:32:27 +0200

Olá pessoal!

Tentando gravar uma macro para inserir automaticamente uma formatação condicional do tipo "A fórmula é": E($E$2=J$9;J12+SOMASE($E7:P7;"Saída";$E12:P12)-SOMASE($E7:P7;"Entrada";$E12:P12)<>$D12) no intervalo de células: J12:J93 (que será variável), me retorna o seguinte erro:

sub Formatar_cond
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
rem dispatcher.executeDispatch(document, ".uno:ConditionalFormatManagerDialog", "", 0, Array())


end sub

Mesmo retirando o rem da linha com erro, o comando somente abre a janela de formatação. Tentei com a linha corrigida acioná-la por um botão e gravar o restante, porém não dá certo, alguém pode me orientar sobre o assunto ?

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

Comentários

Ola @Leandro Vieira, o gravador de macro não tem capacidade de gravar as informações dos parâmetros da Formatação condicional, entre muitos outros. Só para tirar dúvida, a fórmula indicada acima, quando em uma célula normalmente, é funcional? Mas qual a necessidade de uma macro, que ao meu ver, só vai rodar uma vez, pois as informações estarão gravadas? Me desculpe mas não entendi...

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2017-10-28 21:53:19 +0200 )editar

Foi uma tentativa incorreta, acho melhor fazer a formatação em uma célula e depois copiar e colar somente o formato nas células desejadas. Mas uma dúvida permanece: Onde encontro esses parâmetros que o gravador não inseri, ainda não entendo de programação, mas quando começar já saberei onde encontrar?

imagem do gravatar de Leandro VieiraLeandro Vieira ( 2017-10-28 22:07:40 +0200 )editar

Oi @Leandro Vieira, infelizmente o gravador, não grava tudo. Sobre a formatação condicional só fará se for verdadeira a condição(pergunta), se necessária inclua nova condição para a falsa ser verdadeira e uma nova formatação. Por exemplo, valores acima de 5 cor Vermelha se diferente Verde. A formula será: A1>5 em aplicar estilo VERMELHO (já criado anteriormente) incluir outra condição A1<6 e estilo VERDE.(já criado anteriormente).

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2017-10-28 22:25:58 +0200 )editar
1

Continuando: também existe a possibilidade de formatação na formula: Se for o caso acima do meu exemplo: considerando que A1 é resultado de uma FORMULA: seria =FORMULA+ESTILO(SE(ATUAL()>5;"VERMELHO";"VERDE"))

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2017-10-28 22:31:12 +0200 )editar

Obrigo pelos comentários e respostas, irei testar todos! Não haveria necessidade da condição falsa, pois somente formatará se for verdadeira.

imagem do gravatar de Leandro VieiraLeandro Vieira ( 2017-11-03 00:08:59 +0200 )editar

1 Resposta

3

respondidas 2017-10-29 13:02:46 +0200

imagem do gravatar de Grafeno

updated 2017-11-05 23:00:56 +0200

Bom dia,


Uma macro para inserir formatação condicional, sem usar o gravador (limitado e experimental), seria:

Sub InserirFormatacaoCondicional
Dim oDoc As Object, oPlan As Object
Dim oIntervalo As Object, oFormatoCondicional As Object
Dim oCondicoes(2) As New com.sun.star.beans.PropertyValue

   oDoc = ThisComponent
   oPlan = oDoc.Sheets.getByName( "Planilha1" )
   oIntervalo = oDoc.CurrentController.Selection '<<< Intervalo selecionado'
   oFormatoCondicional = oIntervalo.ConditionalFormat

   oCondicoes(0).Name = "Operator"
   oCondicoes(0).Value = com.sun.star.sheet.ConditionOperator.FORMULA
   oCondicoes(1).Name = "Formula1"
   oCondicoes(1).Value = "E($E$2=J$9;J12+SOMASE($E7:P7;""Saída"";$E12:P12)-SOMASE($E7:P7;""Entrada"";$E12:P12)<>$D12)"
   oCondicoes(2).Name = "StyleName"
   oCondicoes(2).Value = "Good"

   oFormatoCondicional.addNew( oCondicoes() )
   oIntervalo.ConditionalFormat = oFormatoCondicional
End Sub


Atte,

editar assinalar como ofensivo Excluir Link mais

Comentários

Do intervalo "J$12:j$93", preciso que a coluna seja variável, pois a macro anterior já me passa a localização da palavra "Fechamento", e a partir dela aplicarei a formatação.

imagem do gravatar de Leandro VieiraLeandro Vieira ( 2017-11-03 00:24:32 +0200 )editar

@Leandro Vieira, como a "macro anterior'" retorna a posição? É string (texto) ou não? Para adaptar esta, preciso saber como é que a outra retorna.

imagem do gravatar de GrafenoGrafeno ( 2017-11-03 20:23:58 +0200 )editar

Seria uma macro gravada basicamente usando o localizar e substituir: buscando a palavra "fechamento"; com os parâmetros "Células Inteiras"; a opção Pesquisar em: Valores; e direção de pesquisa: Linhas, marcados. Após localizada a palavra desceria duas células abaixo e selecionaria o intervalo a aplicar a formatação com CTRL+SHIFT+SETA P/ BAIXO, aplicando assim a formatação e indo para célula $D$12.

imagem do gravatar de Leandro VieiraLeandro Vieira ( 2017-11-04 16:32:26 +0200 )editar

Troquei a linha que define o intervalo para uma que busca o que está selecionado no momento. Se a macro anterior, gravada, terminar com a seleção através do CTRL+SHIFT+SETA P/ BAIXO, a macro acima rodará perfeitamente. Veja se é isto.

imagem do gravatar de GrafenoGrafeno ( 2017-11-05 23:09:34 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2017-10-28 19:40:36 +0200

Lidas: 312 vezes

Última atualização: Nov 05 '17