Avatar billede blolsen Juniormester
24. marts 2014 - 20:02 Der er 7 kommentarer og
1 løsning

Flyt kun værdier, når en hel række flyttes fra ark1 til ark 2 ved ændringer i en eller flere celler

Hej

Dette er et opfølgende spørgsmål til et tidligere spørgsmål der lød "flyt række fra ark1 til ark 2 ved ændringer i en eller flere celler"

Jeg fik en glimrende løsning til problemet med kode 1 - se nedenstående.
Et problem, som dukkede op umiddelbart efter, var dog at koden også flyttede formler med, hvilket resulterede i fejl i de respektive celler på ark2.
Jeg har forsøgt at løse problemet ved at indsætte dataene som værdier i ark2, hvilket også lykkes - se kode 2

Problemet, som jeg vil frem til er, at flytningen med kode 1 stort set ikke bliver opdaget af brugerne af arket, mens flytningen er meget tydelig i kode 2, når arket opdateres.

Det er nok kun et kosmetisk problem:-), men er det muligt at lave kode 2, sådan at flytningen i kode 2 går lige så ubemærket hen, som i kode 1




Kode 1


Private Sub Worksheet_Change(ByVal Target As Range)
Dim RW As Long
If Not Intersect(Target, Range("A:AV")) Is Nothing Then
        If Target.Row = ActiveCell.Row Then
        Target.Interior.Color = vbGreen ' laver rettet celle grøn
        Exit Sub ' NY
        End If
    Target.Interior.Color = vbGreen ' laver sidste rettede celle grøn, indrn kopiering
    RW = Worksheets("ark2").UsedRange.Rows.Count + 1  'row
    Target.EntireRow.Copy Worksheets("ark2").Range("A" & RW)
    Worksheets("ark2").Range("AW" & RW) = Now() ' sætter dato og klokken i kolonne AW
    Range(Cells(Target.Row, "A"), Cells(Target.Row, "AV")).Interior.ColorIndex = xlNone
End If
End Sub



Kode 2


Private Sub Worksheet_Change(ByVal Target As Range)
Dim RW As Long
If Not Intersect(Target, Range("A:AV")) Is Nothing Then
        If Target.Row = ActiveCell.Row Then
        Target.Interior.Color = vbGreen ' laver rettet celle grøn
        Exit Sub ' NY
        End If
 
    Target.Interior.Color = vbGreen ' laver sidste rettede celle grøn, indrn kopiering
   
    RW = Worksheets("ark2").UsedRange.Rows.Count + 1  'row
    Target.EntireRow.Copy
    Worksheets("ark2").Range("A" & RW).PasteSpecial Paste:=xlPasteValues
    Worksheets("ark2").Range("A" & RW).PasteSpecial Paste:=xlPasteFormats

    Worksheets("ark2").Range("AW" & RW) = Now() ' sætter dato og klokken i kolonne AW
    Range(Cells(Target.Row, "A"), Cells(Target.Row, "AV")).Interior.ColorIndex = xlNone
    Application.CutCopyMode = False
 
End If
End Sub
Avatar billede kabbak Professor
24. marts 2014 - 20:38 #1
Private Sub Worksheet_Change(ByVal Target As Range)
Dim RW As Long
If Not Intersect(Target, Range("A:AV")) Is Nothing Then
        If Target.Row = ActiveCell.Row Then
        Target.Interior.Color = vbGreen ' laver rettet celle grøn
        Exit Sub ' NY
        End If
 
    Target.Interior.Color = vbGreen ' laver sidste rettede celle grøn, indrn kopiering
   
    RW = Worksheets("ark2").UsedRange.Rows.Count + 1  'row
    Application.ScreenUpdating = False
    Target.EntireRow.Copy
    Worksheets("ark2").Range("A" & RW).PasteSpecial Paste:=xlPasteValues
    Worksheets("ark2").Range("A" & RW).PasteSpecial Paste:=xlPasteFormats

    Worksheets("ark2").Range("AW" & RW) = Now() ' sætter dato og klokken i kolonne AW
    Range(Cells(Target.Row, "A"), Cells(Target.Row, "AV")).Interior.ColorIndex = xlNone
    Application.CutCopyMode = False
  Application.ScreenUpdating = True
End If
End Sub
Avatar billede blolsen Juniormester
24. marts 2014 - 20:59 #2
Hej Kabbak,

du er en ven i nøden:-) Det virker super.

Et enkelt tillægsspørgsmål, så skal jeg nok stoppe:-)

Koden overfører fint værdier og formater til ark2, men cellefarverne på ark 1 forsvinder i "overførslen". Kan man få kode til at bibeholde farverne og evt. andre celleformater på ark 1?
Avatar billede kabbak Professor
24. marts 2014 - 21:04 #3
udkommenter linjen

    Range(Cells(Target.Row, "A"), Cells(Target.Row, "AV")).Interior.ColorIndex = xlNone

eller fjern den
Avatar billede kabbak Professor
24. marts 2014 - 21:05 #4
Men til sidst er alle celle jo grønne ;-))
Avatar billede blolsen Juniormester
24. marts 2014 - 21:17 #5
hej igen, ja det kan jeg da godt se:-)

Kan man lave en if-sætning i retning af nedenstående, der kun fjerner farven fra de celler, som har fået farven grøn?

If Target.Interior.Color = vbGreen Then
    Range(Cells(Target.Row, "A"), Cells(Target.Row, "AV")).Interior.ColorIndex = xlNone
   
Else......
End If
Avatar billede kabbak Professor
24. marts 2014 - 21:30 #6
Private Sub Worksheet_Change(ByVal Target As Range)
Dim RW As Long
If Not Intersect(Target, Range("A:AV")) Is Nothing Then
        If Target.Row = ActiveCell.Row Then
        Target.Interior.Color = vbGreen ' laver rettet celle grøn
        Exit Sub ' NY
        End If
 
    Target.Interior.Color = vbGreen ' laver sidste rettede celle grøn, indrn kopiering
   
    RW = Worksheets("ark2").UsedRange.Rows.Count + 1  'row
    Application.ScreenUpdating = False
    Target.EntireRow.Copy
    Worksheets("ark2").Range("A" & RW).PasteSpecial Paste:=xlPasteValues
    Worksheets("ark2").Range("A" & RW).PasteSpecial Paste:=xlPasteFormats

    Worksheets("ark2").Range("AW" & RW) = Now() ' sætter dato og klokken i kolonne AW
   
    For Each C In Range(Cells(Target.Row, "A"), Cells(Target.Row, "AV")).Cells
    If C.Interior.Color = vbGreen Then C.Interior.ColorIndex = xlNone
    Next
   
    Application.CutCopyMode = False
  Application.ScreenUpdating = True
End If
End Sub
Avatar billede blolsen Juniormester
24. marts 2014 - 21:57 #7
super  - takker mange gange:-)

Send et svar, så overfører jeg pointene
Avatar billede kabbak Professor
24. marts 2014 - 22:01 #8
du har fået svar i #1
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