23. februar 2004 - 22:53Der er
12 kommentarer og 1 løsning
Datavalidering og cellefarver
Hvordan kan man lave datavalidering på en celle og samtidigt få ændret farven på cellen hvis værdien er udenfor valideringen? Der skal ikke være nogen kommandoknap el. lign. til at køre valideringen. Hvor bliver koden for [Data]-> [Datavalidering] egentlig gemt?
Du kan nok opnå det, du ønsker ved at kombinere datavalidering og betinget formatering, men så kan du ikke samtidigt forhindre indtastninger, der falder unden for valideringen (Stop). Du må nøjes med at bruge Information eller Advarsel.
Jeg har ingen anelse om, hvor valideringsreglerne gemmes. Sorry!
Jeg har en række felter f.eks B25:B35. i disse felter skal der vælges værdier efter en datavalidering. Denne validering kommer fra et celleområde f.eks C50:C75 som kaldes CPU (=CPU i datavalidering). Jeg har ingen fejlmelding oprettet, da brugerne i princippet gerne må skrive noget andet end valideringen tillader, de skal da blot have en advarsel ved at farven på feltet skifter fra grøn til rød. Det mit spørgsmål egentlig går på er hvorvidt det i Excel er muligt at få kørt en kontrol løbende i baggrunden uden at brugeren skal trykke på f.eks en knap
Jeg går ud fra at du har navngivet området C50:C75 til CPU.
Sæt denne makro ind i dit arkmodul. Udbyg den selv, med dine betingelser
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("CPU")) Is Nothing Then If Target.Value > 100 Then Target.Interior.Color = vbRed ' rød hvis over 100 Else Target.Interior.Color = vbGreen ' ellers grøn End If End If End Sub
kabbak-> Måske har jeg misforstået problemet, men din kode løser det i hvert fald ikke som jeg opfatter det, nemlig at hvis der tastes et tal i en af cellerne B25:B35, skal der undersøges om det indtastede tal eksisterer sig i området CPU Hvis ikke, skal cellen farves. Din kode farver cellerne I CPU, hvis ikke en eller anden betingelse er opfyldt.
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("B25:B35")) Is Nothing Then For Each c In Range("CPU") If Target.Value = c.Value Then Target.Interior.Color = vbGreen Exit Sub End If Next Target.Interior.Color = vbRed ' ellers grøn End If End Sub
Problemet kan vel også klares uden makro, men med betinget formatering stil dig i B25, vælg betinget formatring vælg "Formel er =" og skriv =TÆL.HVIS(cpu;B25)<1 vælg en farve og tryk OK. Kopier formatet nedad.
Da jeg skal have bygget en masse andre argumenter ind i denne datavalidering er den eneste måde for mig nok at gøre det i VB. Derfor point til Kabbak!
Synes godt om
Ny brugerNybegynder
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.