• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

nokPT

[Excel2003] Formatar a cor da célula onde está a fórmula de vba

15 mensagens neste tópico

Bom dia,

Estou a tentar mudar a cor do fundo da célula actual onde tenho a formula dependendo do resultado, mas não consigo alterar.

O meu código (resumido) actual é o seguinte:

Public Function TipoDia(ByVal Data As Date) As String
    Dim Ano As Integer
    Dim Mes As Integer
    Dim Dia As Integer
    
    Ano = year(Data)
    Mes = Month(Data)
    Dia = Day(Data)
    
    If Weekday(Data, 2) = 6 Then
        TipoDia = "Sábado"
        ActiveCell.Interior.ColorIndex = 44
    End If
    If Weekday(Data, 2) = 7 Then
        TipoDia = "Domingo"
        ActiveCell.Interior.ColorIndex = 46
    End If
' ...
End Function

Já tentei de outras formas, já acrescentei no cabeçalho da função um range a apontar para a própria célula e na vez de ActiveCell escrevi a variavel desse range. O resultado é sempre o mesmo, altera o texto (da célula), mas não altera a cor do fundo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já, aliás comecei por aí ;)

Já vi outros exemplos do teu blog, já procurei na net.

Já usei com ActiveCell, já acrescentei a célula como Range à função, o resultado é sempre o mesmo, não preenche o fundo da célula.

Já experimentei com color e com colorindex.

Devia funcionar  :wallbash:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas o que o código faz (ou devia fazer) ?  É só para formatar uma célula ? Explica lá com mais detalhes.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A ideia é mediante uma data (de célula anexa, enviada como ByVal) e escrever por extenso o dia da semana: Segunda .. Domingo, ou escrever caso seja feriado que feriado é e finalmente no caso de sábados formatar com o fundo azul (p.ex.;), se for feriado preenche com cor amarelo e se for domingo preenche com vermelho.

A ideia é esta.

Já tentei alterar o código da própria célula, e alternativamente de uma célula anexa, mas o resultado foi o mesmo, não formata, mas altera o dia dependendo da data.

Estou há volta com o código e não sei se no meio de tantas alterações o vba se passou, porque a certa altura substitui um variável por Activecell e depois eliminei a declaração da variável, só que agora aparece Activecell em vez de ActiveCell, é um pormenor de pouca importância (em basic mas em C é um mundo de diferenças)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não consigo passar nada ou formatar por ActiveCell, quando tento escrever em ActiveCell.Value dá-me um erro circular.

As formatações por e simplesmente são ignoradas.

Será por ser uma Function?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, já entendi, mas tu não podes através de uma função numa célula, alterar a sua formatação. Apenas podes retornar valores.

Podes usar uma formatação condicional ou, como o meu exemplo mostra, através do evento Worksheet_Change

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Também já andei há volta com isso, mas os resultados não são os necessários.

O teu código funciona muito bem se escrevermos linha a linha Texto.

No meu caso estou a usar uma função e faço copy de 1 célula e paste em várias, o resultado é que o Target ou Range deixa de ser uma célula, pelo que o vb dá erro.

O mesmo acontece de seleccionar uma linha inteira e copiar para baixo.

Outro problema é no final do documento, não vou escrever nesta posição, vou escrever em colunas ao lado e quando mudo a data numa coluna ao lado, quero formatar esta coluna (e depois fazer mais umas coisadas), como não estou a escrever nesta coluna, ele não formata a célula, tenho depois que copiar a função célula a célula para formatar.

Provavelmente tenho que fazer muito mais código, (vb.net é muito mais simples)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Provavelmente tenho que fazer muito mais código, (vb.net é muito mais simples)

Não tens de fazer muito mais código, simplesmente não dá como queres.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, quando são há solução, não há solução...  ;)

Só não sei que icon por :hmm:, nem sei como meter o visto verde para concluir o tópico :nono:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não me aparece (ou não vejo) Topic Solved em lado nenhum, nem nesta mensagem nem em mensagens que tenho abertas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não me aparece (ou não vejo) Topic Solved em lado nenhum, nem nesta mensagem nem em mensagens que tenho abertas.

Agora aparece como Topic Not Solved!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei se isso pode te ajudar....  é um pedaço de um código que uso para marcar o interior das células de cinza para que eu possa excluílas depois

Public Sub Copia()

X = 1

With Worksheets(1).Range("a1:a500")

    Set c = .Find("ID.*", LookIn:=xlValues)

    If Not c.Interior.Pattern = xlpatterbgray50 Then

        firstAddress = c.Address

        Do

            Worksheets(2).Cells(X, 1).Value = c.Value

            Set c = .FindNext©

            If Worksheets(2).Cells(X, 1).Value = "" Then

                Exit Do

            Else

                X = X + 1

            End If

        Loop While Not c Is Nothing And c.Address <> firstAddress

    End If

End With

Substituir

End Sub

O código do programa é muito extenso, então estou frisando o que uso para mudar o fundo da célula

c.Interior.Pattern = xlpatterbgray50, onde c é range, podendo ser escrita no formato:

worksheets(X).range(a1:a100).interior.pattern = cor

ou

worksheets(x).range(cells(x1,x2),cells(y1,y2)).interior.pattern = cor

Espero que possa te ajudar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora