nokPT Posted April 15, 2009 at 11:28 PM Report #257015 Posted April 15, 2009 at 11:28 PM 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 Ricardo Timóteo
jpaulino Posted April 16, 2009 at 08:31 AM Report #257039 Posted April 16, 2009 at 08:31 AM Já viste este exemplo: Excel: Formatação Condicional Expandida
nokPT Posted April 16, 2009 at 08:51 PM Author Report #257183 Posted April 16, 2009 at 08:51 PM 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 Ricardo Timóteo
jpaulino Posted April 16, 2009 at 08:55 PM Report #257185 Posted April 16, 2009 at 08:55 PM Mas o que o código faz (ou devia fazer) ? É só para formatar uma célula ? Explica lá com mais detalhes.
nokPT Posted April 16, 2009 at 09:14 PM Author Report #257189 Posted April 16, 2009 at 09:14 PM 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) Ricardo Timóteo
nokPT Posted April 16, 2009 at 10:29 PM Author Report #257199 Posted April 16, 2009 at 10:29 PM 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? Ricardo Timóteo
jpaulino Posted April 16, 2009 at 10:51 PM Report #257201 Posted April 16, 2009 at 10:51 PM 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
nokPT Posted April 17, 2009 at 09:05 AM Author Report #257219 Posted April 17, 2009 at 09:05 AM 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) Ricardo Timóteo
jpaulino Posted April 17, 2009 at 08:12 PM Report #257364 Posted April 17, 2009 at 08:12 PM 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.
nokPT Posted April 17, 2009 at 09:27 PM Author Report #257376 Posted April 17, 2009 at 09:27 PM Ok, quando são há solução, não há solução... 😉 Só não sei que icon por ?, nem sei como meter o visto verde para concluir o tópico :nono: Ricardo Timóteo
jpaulino Posted April 17, 2009 at 11:08 PM Report #257395 Posted April 17, 2009 at 11:08 PM Carregas em Topic Solved! Mas já está 😉
nokPT Posted April 18, 2009 at 10:59 AM Author Report #257444 Posted April 18, 2009 at 10:59 AM Não me aparece (ou não vejo) Topic Solved em lado nenhum, nem nesta mensagem nem em mensagens que tenho abertas. Ricardo Timóteo
jpaulino Posted April 19, 2009 at 08:56 AM Report #257591 Posted April 19, 2009 at 08:56 AM 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!
nokPT Posted April 20, 2009 at 09:09 AM Author Report #257714 Posted April 20, 2009 at 09:09 AM Bom dia, Não, não aparece, onde devia aparecer? Ricardo Timóteo
rogi_cps Posted May 11, 2009 at 04:20 PM Report #263047 Posted May 11, 2009 at 04:20 PM 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.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now