Avatar billede B84452 Novice
14. december 2017 - 10:21 Der er 5 kommentarer og
1 løsning

VBA læser værdi som celle reference

Hej

Jeg er løbet ind i et dumt problem, som sikkert har en simpel løsning, jeg kan bare ikke huske/finde den.

Det er en simpel macro som skal farve 3 celler på baggrund af værdien i en tredje celle. F.eks. hvis D2 = 2 så skal celler cellerne D3-D5 blive gule. Mit problem er at en af de værdier der kan optræde i celle D2 er A1 og det kan macro'en ikke finde ud af. Jeg tror den læser A1 som en celle reference i stedet for en værdi.

Private Sub worksheet_change(ByVal target As Range)
    Dim i As Long, r1 As Range, r2 As Range
    For i = 3 To 5
        Set r1 = Range("D2")
        Set r2 = Range("D" & i & ":D" & i)
        If r1.Value = "A1" Then
            r2.Interior.ColorIndex = 45
        End If
        If r1.Value = 2 Then
            r2.Interior.ColorIndex = 27
        End If
    Next i
End Sub

Er der nogen der har en simpel løsning på det?

Mvh
Kenneth
Avatar billede finb Ekspert
14. december 2017 - 10:36 #1
Utestet:
Private Sub worksheet_change(ByVal target As Range)
    Dim  r1 As Range, r2 As Range
    'old: For i = 3 To 5
        Set r1 = Range("D2")
        Set r2 = Range("D3:D5")  'old: Range("D" & i ":D" & i)
        If r1.Value = range("A1").value Then
            r2.Interior.ColorIndex = 45
        End If
        If r1.Value = 2 Then
            r2.Interior.ColorIndex = 27
        End If
    'old: Next i
End Sub
Avatar billede B84452 Novice
14. december 2017 - 11:05 #2
Tak for forslaget, det var desværre ikke nok.

Nu bliver cellerne D3:D5 farvet orange uanset hvilken værdi D2 har, medmindre cellen har værdien 3, så bliver den gul.
Avatar billede finb Ekspert
14. december 2017 - 11:18 #3
Hvis du mener:

If r1.Value = 2 Then
    r2.Interior.ColorIndex = 27
else if r1=a1
    r2.Interior.ColorIndex = 45
else r1=farveløs
endif
-så ret denne til...
Avatar billede Jan Hansen Ekspert
14. december 2017 - 11:30 #4
Private Sub worksheet_change(ByVal target As Range)
    Dim  r1 As Range, r2 As Range
        Set r1 = Range("D2")
        Set r2 = Range("D3:D5")
        Select Case r1.Value 'evt  r1.Text
          Case 2
              r2.Interior.ColorIndex = 27
          Case "A1"
            r2.Interior.ColorIndex = 45
          Case Else

    End Select
End Sub

Ej testet
Avatar billede excelent Ekspert
14. december 2017 - 19:14 #5
Private Sub worksheet_change(ByVal target As Range)
If Intersect(target, Range("D2")) Is Nothing Then Exit Sub
If target = 2 Then Range("D3:D5").Interior.ColorIndex = 27
If target = "A1" Then Range("D3:D5").Interior.ColorIndex = 45
End Sub
Avatar billede B84452 Novice
19. december 2017 - 08:18 #6
Excelents forslag virker. Med den løsning kan jeg uden problemer opnå det jeg ønsker, tak for det.

Også tak for de øvrige forslag.
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

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