Avatar billede peterkrog Nybegynder
04. november 2012 - 18:33 Der er 17 kommentarer og
1 løsning

Betinget Formatering med =HVIS($A1<>"";REST(RÆKKE();2)=0;"")

Hej igen igen :)

Jeg har efter et spg oprettet herinde fået den betinget formatering (farv hver anden række) til at virke med =HVIS($A1<>"";REST(RÆKKE();2)=0;""). Mit problem er jeg henter data fra et andet dataark og den information (5 rækker) jeg trækker over for baggrunden hvid, og det sker efter den betinget formatering er afviklet.

Da jeg stadigvæk ikke er for snu til vb prøvet jeg lidt panikken og indspille en makro der lavet den betinget formatering igen efter data var hentet. Men det blev noget rod.


Sub Makro2()
'
' Makro2 Makro
'
' Genvejstast: Ctrl+Skift+A
'
    Columns("A:P").Select
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=HVIS($A1<>"""";REST(RÆKKE();2)=0;"""")"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 16316664
        .TintAndShade = 0
    End With
    Application.Goto Worksheets("Log").Cells(Rows.Count, "A").End(xlUp).Offset(1)
End Sub


Håber en derude kender en smartere løsning.
Avatar billede peterkrog Nybegynder
04. november 2012 - 18:38 #1
Her er mit ark

http://gupl.dk/686868/
Avatar billede A-J Nybegynder
04. november 2012 - 20:11 #2
Hejsa

Jeg er ny herinde, så håber jeg gør det rigtigt og du kan bruge mit svar.

Her er en bid fra noget jeg har lavet tidligere, måske du kan bruge det.


Sub Farve()

Dim NumberOfRows As Long
Dim NumberOfColums As Long
Dim sourcesheet As Worksheet

Set sourcesheet = ActiveWorkbook.ActiveSheet

NumberOfRows = sourcesheet.Range("A65536").End(xlUp).Row
NumberOfColumns = sourcesheet.Range("ZZ1").End(xlToLeft).Column

'Fjern farver fra række 2 og ned til sidste linje+1000 (hvis der er farvelagt linjer efter den sidste)
    Rows("2:" & NumberOfRows + 1000).Select
    With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
   
' Indæst farve på hver anden linje der er aktiv
For x = 2 To NumberOfRows Step 2
    Range("a" & x, Range("a" & x).Offset(0, NumberOfColumns - 1)).Interior.ColorIndex = 6
    If x <> NumberOfRows Then
        Range("a" & x + 1, Range("a" & x + 1).Offset(0, NumberOfColumns - 1)).Interior.ColorIndex = 2
    End If
Next x

End Sub
Avatar billede store-morten Ekspert
04. november 2012 - 20:18 #3
Prøv at "ryde op" i "betinget formatering"

Du har 6 stk."betinget formatering"
Avatar billede peterkrog Nybegynder
04. november 2012 - 20:57 #4
Vil dit svar ændre udbedre mit problem
Avatar billede store-morten Ekspert
04. november 2012 - 21:02 #5
Nej ;-)

Hver Makro2 køres oprettes jo en ny.
Avatar billede peterkrog Nybegynder
04. november 2012 - 21:05 #6
#2
Den ville kunne gøre det men skal den laves til en SelectionChange for at træde i kræft når jeg udfylder et felt?
Avatar billede peterkrog Nybegynder
04. november 2012 - 21:07 #7
#5

Ja det kan jeg godt se var også godt klar over den ikke ville kunne bruges
Avatar billede store-morten Ekspert
04. november 2012 - 21:09 #8
Denne sletter førrst alle "Betinget formatering"
Og derefte oprettes igen.
(Husk altid at afprøve på test Ark)
Sub farvHverAndenLinie()

Application.ScreenUpdating = False
    Cells.FormatConditions.Delete
    Columns("A:P").Select
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=HVIS($A1<>"""";REST(RÆKKE();2)=0;"""")"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 16316664
        .TintAndShade = 0
    End With
Application.ScreenUpdating = True
    Worksheets("Log").Cells(Rows.Count, "A").End(xlUp).Offset(1).Select
End Sub
Avatar billede store-morten Ekspert
04. november 2012 - 21:41 #9
Hvilken kode henter data?
Avatar billede peterkrog Nybegynder
04. november 2012 - 21:39 #10
#8
Den virker som den skal. Men hvor og hvornår skal proceduren kaldes for det giver bedst mening? har lidt svært ved at se det. Kunne godt tænke mig at den udførte din procedure lige i røven af den henter data fra dataark? er det muligt?
Avatar billede peterkrog Nybegynder
04. november 2012 - 21:48 #11
Denne sub fra Ark2 (Log)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim dataRække As Long
  If flag = False Then
        If ændretRække > 0 Then
            flag = True
            dataRække = søgSkib(UCase(Range("B" & ændretRække).Value))
           
            If dataRække > 0 Then
                With arkData
                    .Range("A" & dataRække & ":G" & dataRække).Copy
                End With
               
                ActiveSheet.Range("B" & ændretRække).Select
                ActiveSheet.Paste
               
                ActiveSheet.Range("A" & ændretRække) = Format(Now, "dd-mm-yyyy")
               
                Selection.Cells(1, 8).Select
               
            End If
        End If
       
        Set arkData = Nothing
        Application.CutCopyMode = False
        ændretRække = 0
       
        flag = False
    End If
End Sub
Avatar billede store-morten Ekspert
04. november 2012 - 21:53 #12
Prøv:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim dataRække As Long
  If flag = False Then
        If ændretRække > 0 Then
            flag = True
            dataRække = søgSkib(UCase(Range("B" & ændretRække).Value))
           
            If dataRække > 0 Then
                With arkData
                    .Range("A" & dataRække & ":G" & dataRække).Copy
                End With
               
                ActiveSheet.Range("B" & ændretRække).Select
                ActiveSheet.Paste
               
                ActiveSheet.Range("A" & ændretRække) = Format(Now, "dd-mm-yyyy")
               
                Selection.Cells(1, 8).Select
               
            End If
        End If
       
        Set arkData = Nothing
        Application.CutCopyMode = False
        ændretRække = 0
       
        flag = False
    End If
   
    Application.ScreenUpdating = False
Application.EnableEvents = False 'For at undgå at koden looper
    Cells.FormatConditions.Delete
    Columns("A:P").FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=HVIS($A1<>"""";REST(RÆKKE();2)=0;"""")"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 16316664
        .TintAndShade = 0
    End With
    Application.EnableEvents = True 'For at undgå at koden looper
Application.ScreenUpdating = True
   
End Sub
Avatar billede peterkrog Nybegynder
04. november 2012 - 21:59 #13
Den virket desværre ikke. Den farver x antal rækker efter markering af en celle.

x=indtastet linjer /2
Avatar billede A-J Nybegynder
04. november 2012 - 22:46 #14
Hejsa

Jeg har forstået dit problem sådan, at du kun periodisk henter nye data ind og ikke løbende taster nye data. Derfor ville jeg ikke bruge betinget formattering, men lave baggrundsfarverne i forbindelse med, at jeg henter mine data ind i arket.

Du kan prøve at sætte mit forslag i forlængelse af den makro du har, der henter data (mellem dit nuværende "End if og End sub"). Du skal så ikke medtage linjerne Sub Farve () og End Sub fra min forslag.
Avatar billede peterkrog Nybegynder
04. november 2012 - 23:04 #15
#14
For en fejl ved ".Pattern = xlNone"

Har du tid kan du prøv at ligge det ind i excel arket jeg har uploaded højere oppe
Avatar billede store-morten Ekspert
04. november 2012 - 23:27 #16
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim dataRække As Long
  If flag = False Then
        If ændretRække > 0 Then
            flag = True
            dataRække = søgSkib(UCase(Range("B" & ændretRække).Value))
           
            If dataRække > 0 Then
                With arkData
                    .Range("A" & dataRække & ":G" & dataRække).Copy
                End With
               
                ActiveSheet.Range("B" & ændretRække).Select
                Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
                xlNone, SkipBlanks:=False, Transpose:=False

               
                ActiveSheet.Range("A" & ændretRække) = Format(Now, "dd-mm-yyyy")
               
                Selection.Cells(1, 8).Select
               
            End If
        End If
       
        Set arkData = Nothing
        Application.CutCopyMode = False
        ændretRække = 0
       
        flag = False
    End If
End Sub

Måske:
Er det ActiveSheet.Paste der fjerner "Betinget formatering"
Avatar billede peterkrog Nybegynder
05. november 2012 - 00:32 #17
Det var det. Mange tak. Smid et svar.
Avatar billede store-morten Ekspert
05. november 2012 - 00:36 #18
Velbekomme
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

IT-JOB