Avatar billede dla Praktikant
04. april 2008 - 13:11 Der er 8 kommentarer og
1 løsning

Betinget formatering vba

I kolonne K har jeg lavet en validering med en liste man skal vælge fra: I gang, Ordre, Afsluttet, Død, Tabt. Afhængigt af hvad man vælger, skal rækken udfyldes med et mønster. Det virker fint hvis man vælger fra listen, men hvis man skriver og trykker Enter, bliver rækken ikke udfyldt,hvorfor??? Jeg vil have det til at virke sådan at rækken bliver udfyldt uanset om man vælger fra listen eller skriver og trykker Enter, Tab eller Pil op/ned/hen. Kan det lade sig gøre?


Min kode:

Private Sub Worksheet_Change(ByVal Target As Range)

If ActiveCell.Column = 11 Then
  With Worksheets("SYSTEMER")
        With Target
            Select Case ActiveCell.Value
                Case "Ordre"
                    For Kol = 1 To 22
                    ActiveCell.EntireRow.Cells(1, Kol).Interior.Pattern = xlGray8 'lægger baggrundsfarve på rækken fra A til V
                    Next Kol
                Case "Afsluttet"
                    For Kol = 1 To 22
                    ActiveCell.EntireRow.Cells(1, Kol).Interior.Pattern = xlGray16
                    Next Kol
                Case "Død"
                    For Kol = 1 To 22
                    ActiveCell.EntireRow.Cells(1, Kol).Interior.Pattern = xlGray25
                    Next Kol
                Case "Tabt"
                    For Kol = 1 To 22
                    ActiveCell.EntireRow.Cells(1, Kol).Interior.Pattern = xlGray50
                    Next Kol
                Case Else
                    For Kol = 1 To 22
                    ActiveCell.EntireRow.Cells(1, Kol).Interior.Pattern = xlNone
                    Next Kol
            End Select
        End With
  End With
End If
End Sub
Avatar billede supertekst Ekspert
04. april 2008 - 13:54 #1
Får du ikke en fejlmelding, når der indtastes i cellen med datavalidering?
Avatar billede dla Praktikant
04. april 2008 - 14:05 #2
Nej, jeg kan godt skrive i cellen, selvfølgelig kun noget der står på listen. Jeg kan ikke se en mulighed for at afskære folk fra at skrive, men kun vælge, kan man sætte den til det?

Jeg kan godt se hvorfor det ikke virker når man trykker Enter, for så er ActiveCell jo nedenunder hvor der ingenting står. For skriver jeg i cellen ovenover en celle med en tekst på listen, bliver rækken farven, altså den række man er hoppet ned på.

Hvordan pokker får jeg det til at fungere rigtigt?
Avatar billede jkrons Professor
04. april 2008 - 15:42 #3
Prøv at udskifte ActiveCell.Value med Target.Value i din Select Case.
Avatar billede dla Praktikant
04. april 2008 - 16:03 #4
Ja, det er jeg også kommet frem til i mellemtiden :-) og så fungerer det rigtigt når jeg vælger fra listen og når jeg skriver og trykker Enter, men jeg skal skrive første bogstav med stort, ellers virker det ikke. Og det virker ikke hvis jeg trykker Tab eller Pil op.

Jeg kan jo selvfølgelig lave flere Cases, hvor jeg også skriver teksten med småt, men kan jeg så få Excel til automatisk at ændre første bogstav til stort?
Avatar billede jkrons Professor
04. april 2008 - 17:13 #5
Prøv at rette til (ikke testet)

Select Case Application.Proper(ActiveCell.Value)
Avatar billede jkrons Professor
04. april 2008 - 17:14 #6
Og selvefølgelig Target.Value i stedet for ActiveCell.Value
Avatar billede kabbak Professor
07. april 2008 - 08:42 #7
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 11 Then
  With Worksheets("SYSTEMER")
        With Target
            Select Case UCase(Target.Value) ' laver det om til store bogstaver
                Case "ORDRE"
                    For Kol = 1 To 22
                    Target.EntireRow.Cells(1, Kol).Interior.Pattern = xlGray8 'lægger baggrundsfarve på rækken fra A til V
                    Next Kol
                Case "AFSLUTTET"
                    For Kol = 1 To 22
                    Target.EntireRow.Cells(1, Kol).Interior.Pattern = xlGray16
                    Next Kol
                Case "DØD"
                    For Kol = 1 To 22
                    Target.EntireRow.Cells(1, Kol).Interior.Pattern = xlGray25
                    Next Kol
                Case "TABT"
                    For Kol = 1 To 22
                    Target.EntireRow.Cells(1, Kol).Interior.Pattern = xlGray50
                    Next Kol
                Case Else
                    For Kol = 1 To 22
                    Target.EntireRow.Cells(1, Kol).Interior.Pattern = xlNone
                    Next Kol
            End Select
        End With
  End With
End If
End Sub
Avatar billede dla Praktikant
08. april 2008 - 09:14 #8
kabbak - din kode virker perfekt! Ligegyldigt om brugeren vil vælge på listen, skrive teksten og trykke Enter, pil op/ned eller hvad de finder på - så fungerer det.

Tusind mange tak! Læg et svar så du kan få point...
Avatar billede kabbak Professor
08. april 2008 - 10:02 #9
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