Avatar billede ninjadall Nybegynder
24. oktober 2006 - 21:30 Der er 5 kommentarer og
1 løsning

Excel - undersøge et felt af gangen

Hej Eksperter

Er newbie i VB...
Har fosøgt at få en makro til at undersøge om en given celle (Eller række af celler)i Excel er markeret gul. det lykkedes mig med følgende kode:

If Selection.Interior.ColorIndex = 6 Then
    MsgBox "Gul er taget"
    End
End If

    Selection.Select
    With Selection.Interior
        .ColorIndex = 6
        .Pattern = xlSolid
    End With


Men hvis nu kun 1 af de markerede celler er gul, og den anden ikke er det, markerer den begge (den ene var jo allerede gul) celler gule, frem for at meddele mig, at en af de markede celler er gule i forvejen.
Hvad kan jeg gøre for at tvinge systemet til at undersøge alle celler i det markerede område?
Avatar billede gider_ikke_mere Nybegynder
24. oktober 2006 - 21:45 #1
Hvad er det du vil have der skal ske? Skal de celler der er gule farves gule???
Avatar billede gider_ikke_mere Nybegynder
24. oktober 2006 - 21:46 #2
Sub test()
Dim Y As Range
For Each Y In Selection
Adresse = Y.Address
If Range(Adresse).Interior.ColorIndex = 6 Then
    With Range(Adresse).Interior
        .ColorIndex = 6
        .Pattern = xlSolid
    End With
End If
Next
End Sub
Avatar billede ninjadall Nybegynder
24. oktober 2006 - 22:16 #3
Har gjort sådan:

Dim Y As Range
For Each Y In Selection
Adresse = Y.Address
If Range(Adresse).Interior.ColorIndex = 6 Then
    MsgBox "FEJL"
    End
Else
    With Range(Adresse).Interior
        .ColorIndex = 6
        .Pattern = xlSolid
    End With
End If
Next


Fungerer som udgangspunkt fint, men kun hvis den "blanke" (ikke farvede) celle er til sidst i markeringen. Hvis den blanke celle er den første i markeringen, melder den godt nok fejlen, men cellen bliver stadig farvet gul.

Det jeg prøver at lave, er et bookingsystem, hvor excel skal undersøge om en given periode (eller specielt DELE af en given periode) er optaget. I givet fald skal der meldes en fejl til brugeren. Er tidsrummet (cellerne) ikke optagede (farvede) skal de farves (optages).
Avatar billede gider_ikke_mere Nybegynder
24. oktober 2006 - 22:22 #4
Ok, det giver lidt mere mening.
Avatar billede ninjadall Nybegynder
24. oktober 2006 - 22:24 #5
Har løst opgaven ved at gøre sådan:

Dim x As Integer
Dim Y As Range

For Each Y In Selection
Adresse = Y.Address
If Range(Adresse).Interior.ColorIndex = 6 Then
    x = x + 1
End If
Next
   
If x >= 1 Then
    MsgBox "TIDSRUMMET ER OPTAGET!!!"
    End
Else
For Each Y In Selection
Adresse = Y.Address
    With Range(Adresse).Interior
        .ColorIndex = 6
        .Pattern = xlSolid
    End With
Next
End If

Er måske lidt omstændigt med de 2 for-Next rutiner, men det virker...

Tusind tak for hjælpen - det var For EACH jeg manglede :-)

Smider du et svar så du kan få point?
Avatar billede gider_ikke_mere Nybegynder
24. oktober 2006 - 22:30 #6
Dette er vel et godt svar:

Sub test()
Dim Y As Range
For Each Y In Selection
Adresse = Y.Address
    If Range(Adresse).Interior.ColorIndex = 6 Then
        MsgBox "FEJL"
        End
    End If
Next
With Selection.Interior
    .ColorIndex = 6
    .Pattern = xlSolid
    End With
End Sub
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
Kurser inden for grundlæggende programmering

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