Avatar billede kasperth Juniormester
12. april 2006 - 13:00 Der er 18 kommentarer og
1 løsning

VBA funktion til "udvidet" betinget formatering

Sidder med en funktion i VBA, som jeg ikke kan få til at virke...

Resultatet af cellen skal være, at baggrundsfarven i cellen styres af funktionen, samtidig med at resultatet vises.

Nedenstående er min kode indsat. Det der mangler er, at dér hvor der står eksempelvis "Farve = R" skal der istedet indsættes en kode, som formaterer cellen, således at baggrunden bliver rød...
Kan man det i VBA???

--------------------------------------------------------------
Public Function Indikator(fra As Double, til As Double, Art As String, Bund As Double, Top As Double)

Application.Volatile
Dim Farve As String
Farve = "H"
If Art = "I" And ((til - fra) / fra) < Bund Then
Farve = "R"
ElseIf Art = "I" And ((til - fra) / fra) > Top Then
Farve = "G"
End If

If Art = "I" And til < 0 And fra > 0 Then
Farve = "R"
ElseIf Art = "I" And til > 0 And fra < 0 Then
Farve = "G"
End If


--------------------------------------------------

Håber at spørgsmålet er forståeligt.


På forhånd tak
Avatar billede x-lars Novice
12. april 2006 - 13:12 #1
If tst = tst2 Then ActiveCell.Font.ColorIndex = 3

Flere farvekoder:

http://www.smartoffice.dk/Tips/LibrarySource.asp?App=Excel&Lib=ColorIndex
Avatar billede excelent Ekspert
12. april 2006 - 13:16 #2
jeg tror han mener baggrunden x-lars
Activecell.interior.colorindex = 3
Avatar billede x-lars Novice
12. april 2006 - 13:27 #3
Æv, s'føli..... ;(
Avatar billede kasperth Juniormester
12. april 2006 - 13:42 #4
Kan stadig ikke få baggrunden til at skifte farve... Ved ikke om det er fordi, at det er en funktion og ikke en makro..... har prøvet at lave lidt mere simpelt eksempel nedenstående.....

----------------------------------
Public Function Indikator2(fra As Double, til As Double)

Dim resultat As Double

If fra > til Then
Activecell.interior.colorindex = 3
End If

resultat = til - fra
Indikator2 = resultat
End Function
__________________________________-
Avatar billede excelent Ekspert
12. april 2006 - 14:17 #5
prøv lige for at se om der er blæk i patronen :-)
If 10 > 5 Then
Activecell.interior.colorindex = 3
End If
Avatar billede kasperth Juniormester
12. april 2006 - 14:32 #6
Nobe.... meningen var at den ovenstående - med til = 5 og fra = 10 - skulle blive rød og der skulle stå -5 i cellen, men cellen skifter ikke farve.. virker koden hos jer???
Avatar billede x-lars Novice
12. april 2006 - 14:49 #7
Denne virker hos mig!

Sub test()

If Range("a1") > -5 Then
ActiveCell.Interior.ColorIndex = 3
Else: ActiveCell.Interior.ColorIndex = 2
End If
End Sub
Avatar billede kabbak Professor
12. april 2006 - 15:05 #8
Man kan ikke skifte farve fra en Function, det kan man kun via en Sub, eller betinget formatering
Avatar billede kasperth Juniormester
12. april 2006 - 15:07 #9
... men det er en makro, og ikke en funktion...

Hele problemet ligger i, at den betingede formatering i Excel kun kan finde ud af at tage udgangspunkt i "sin egen" værdi...

Jeg har derfor lavet en masse hvis-funktioner i VBA, som kan sige om cellens baggrund skal være rød eller grøn, men den betingede formatering giver problemer, da man ikke i celle a1 kan henvise til om der står R eller G i celle b2.

Hvis jeg skal lykkedes med denne ide (som ikke nødvendigvis er den smarteste), så skal den virke ved hjælp af en funktion...

- men takker for  (den forløbige) indsats!
Avatar billede kasperth Juniormester
12. april 2006 - 15:08 #10
okay.... går lidt i tænkeboks...
Avatar billede kasperth Juniormester
12. april 2006 - 15:18 #11
point til kabbak, da der hele tiden har stået FUNKTION ;-)
Avatar billede kabbak Professor
12. april 2006 - 15:19 #12
Betinget formatering, kan udmærket tag udgangspunkt i andre cellers værdi, hvis du låser Rækker eller kolonner i den formel du skriver deri
Avatar billede kabbak Professor
12. april 2006 - 15:27 #13
And ((til - fra) / fra) < Bund

er i betinget formatering

=And(($C1-$B1)/$A1<$D1)

her er kolonner låst
Avatar billede excelent Ekspert
13. april 2006 - 10:50 #14
Prøv højreklik på din arkfane, vælg 'Vis programkode'
Indsæt følgende kode i arkets kodemodul- prøv så at brug din funktion.
Tester forløbig kun på "R" så vælg lige den lol :-)
kabbak har helt ret i sin påstand, men der er en begrænsning på 3
betingelser i betinget formatering.


Private Sub Worksheet_Change(ByVal Target As Range)

If Not ActiveCell.Offset(-1, 0).HasFormula Then
Exit Sub
End If
If ActiveCell.Offset(-1, 0).Value = "R" Then
ActiveCell.Offset(-1, 0).Interior.ColorIndex = 3
End If

End Sub
Avatar billede excelent Ekspert
14. april 2006 - 06:22 #15
Avatar billede excelent Ekspert
14. april 2006 - 17:19 #16
OBS: du skal hente filen ned på din HD. Makroerne virker ikke optimalt på nettet.
Avatar billede kasperth Juniormester
14. april 2006 - 19:16 #17
Jeg afprøver på tirsdag når jeg er tilbage på arb... Men takker alle for indsatsen og håber at i får en fortsat god påske.

Kasper
Avatar billede kasperth Juniormester
26. april 2006 - 10:56 #18
Excelents funktion virker, men ikke optimalt, da jeg arbejder med 3000-4000 rækker og den opdaterer og skærmbilledet kører rundt ved hver indtastning.

Jeg har derfor brugt Kabbaks forslag, så hvis du poster et svar...

- men utroligt, at jeg ikke selv havde luret den. Har trods alt efterhånden brugt et par timer i Excel ;-)

- Men tusind tak for hjælpen til Jer alle

Mens jeg er herinde kan jeg da også lige gøre lidt reklame for mit andet - ubesvarede - spørgsmål herinde: http://www.eksperten.dk/spm/696707
godt nok powerpoint, men lugter lidt af noget VBA... ;-)



Kasperth




Kasperth
Avatar billede kabbak Professor
26. april 2006 - 18:37 #19
et svar ;-))
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester