Avatar billede cjeskovby Nybegynder
21. maj 2006 - 20:28 Der er 3 kommentarer og
2 løsninger

Flyt data fra et ark til et andet inkl formateringen.

Jeg har et ark med en opgave liste, hvor jeg ændre status alt efter hvor lang i processen opgaven er.
Mit problem er at når jeg ændre status fra Slut til Arkiv, så vil jeg flytte hele linien (inkl farve status for formatering)til et andet ark på næste frie linie. Jeg har en overskrift og lign på de første 4 linier.
Avatar billede kabbak Professor
22. maj 2006 - 14:58 #1
Sub FlytTilArkiv()
    Dim DataEnd As Long, C As Range, DataArk As Object, I As Long, KopiArk As Object
    Set DataArk = Worksheets("Ark1")    ' Ret til dit dataark
    Set KopiArk = Worksheets("Ark2")    ' Ret til dit Arkivark
    DataEnd = DataArk.Range("A65536").End(xlUp).Row
    For I = DataEnd To 4 Step -1
        If DataArk.Cells(I, "A") = "Arkiv" Then    ' ret A til den kolonne der skal tjekkes på og "Arkiv", til det den skal finde
            DataArk.Rows(I).Copy KopiArk.Range("A65536").End(xlUp).Offset(1, 0)    ' kopierer ræken over
            DataArk.Rows(I).Delete    'Sletter rækken fra DataArk
        End If
    Next
    Set DataArk = Nothing
    Set KopiArk = Nothing
End Sub
Avatar billede cjeskovby Nybegynder
25. maj 2006 - 11:30 #2
Hej Kabbak

Det virker i princippet, men jeg får en fejl. Jeg har forsøgt at debugge min samlede kode. Se nedestående og som jeg kan se, så når den har udfør DELETE linien i din kode så starter den forfra og fejler så i linien "Select Case UCase(.Value)" da target ikke har nogen værdi. Kan du hjælpe med at løse dette. Jeg tror det sker ved at arket bliver arktivt igen og starter makronen igen. eller hvad.?


Private Sub Worksheet_Change(ByVal Target As Range)

Dim Counter As Integer
Dim r As Range
'Dim C As Range
Dim tmp() As Variant
Dim DataEnd As Long, DataArk As Object, I As Long, KopiArk As Object
 
Set DataArk = Worksheets("Ny opgave")    ' Ret til dit dataark
Set KopiArk = Worksheets("Afsluttet")    ' Ret til dit Arkivark
 
 
If ActiveCell.Column = 3 Then
  With Worksheets("Ny Opgave")
        With Target
            Select Case UCase(.Value)
                Case "NY"
                    For Counter = 1 To 9
                    ActiveCell.EntireRow.Cells(1, Counter).Interior.ColorIndex = 6
                    Next Counter
                    Selection.Sort Key1:=Range("C6"), Order1:=xlAscending, Header:=xlGuess, _
                    OrderCustom:=7, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
                    :=xlSortNormal

                Case "I GANG"
                    For Counter = 1 To 9
                    ActiveCell.EntireRow.Cells(1, Counter).Interior.ColorIndex = 43
                    Next Counter
                    Selection.Sort Key1:=Range("C6"), Order1:=xlAscending, Header:=xlGuess, _
                    OrderCustom:=7, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
                    :=xlSortNormal

                Case "OBSERVATION"
                    For Counter = 1 To 9
                    ActiveCell.EntireRow.Cells(1, Counter).Interior.ColorIndex = 8
                    Next Counter
                    Selection.Sort Key1:=Range("C6"), Order1:=xlAscending, Header:=xlGuess, _
                    OrderCustom:=7, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
                    :=xlSortNormal

                Case "SLUT"
                    For Counter = 1 To 9
                    ActiveCell.EntireRow.Cells(1, Counter).Interior.ColorIndex = 46
                    Next Counter
                    Selection.Sort Key1:=Range("C6"), Order1:=xlAscending, Header:=xlGuess, _
                    OrderCustom:=7, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
                    :=xlSortNormal

                Case "ARKIV"
                    For Counter = 1 To 9
                    ActiveCell.EntireRow.Cells(1, Counter).Interior.ColorIndex = 46
                    Next Counter
                    DataEnd = DataArk.Range("A65536").End(xlUp).Row
                    For I = DataEnd To 4 Step -1
                        If DataArk.Cells(I, "C") = "Arkiv" Then    ' ret A til den kolonne der skal tjekkes på og "Arkiv", til det den skal finde
                            DataArk.Rows(I).Copy KopiArk.Range("A65536").End(xlUp).Offset(1, 0)    ' kopierer ræken over
                            DataArk.Rows(I).Delete    'Sletter rækken fra DataArk
                        End If
                    Next I

                Case Else
                    For Counter = 1 To 9
                    ActiveCell.EntireRow.Cells(1, Counter).Interior.ColorIndex = xlNone
                    Next Counter
            End Select
        Set DataArk = Nothing
        Set KopiArk = Nothing
        End With
  End With
End If

End Sub
Avatar billede cjeskovby Nybegynder
25. maj 2006 - 11:31 #3
Hej Kabbak

Det virker i princippet, men jeg får en fejl. Jeg har forsøgt at debugge min samlede kode. Se nedestående og som jeg kan se, så når den har udfør DELETE linien i din kode så starter den forfra og fejler så i linien "Select Case UCase(.Value)" da target ikke har nogen værdi. Kan du hjælpe med at løse dette. Jeg tror det sker ved at arket bliver arktivt igen og starter makronen igen. eller hvad.?


Private Sub Worksheet_Change(ByVal Target As Range)

Dim Counter As Integer
Dim r As Range
'Dim C As Range
Dim tmp() As Variant
Dim DataEnd As Long, DataArk As Object, I As Long, KopiArk As Object
 
Set DataArk = Worksheets("Ny opgave")    ' Ret til dit dataark
Set KopiArk = Worksheets("Afsluttet")    ' Ret til dit Arkivark
 
 
If ActiveCell.Column = 3 Then
  With Worksheets("Ny Opgave")
        With Target
            Select Case UCase(.Value)
                Case "NY"
                    For Counter = 1 To 9
                    ActiveCell.EntireRow.Cells(1, Counter).Interior.ColorIndex = 6
                    Next Counter
                    Selection.Sort Key1:=Range("C6"), Order1:=xlAscending, Header:=xlGuess, _
                    OrderCustom:=7, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
                    :=xlSortNormal

                Case "I GANG"
                    For Counter = 1 To 9
                    ActiveCell.EntireRow.Cells(1, Counter).Interior.ColorIndex = 43
                    Next Counter
                    Selection.Sort Key1:=Range("C6"), Order1:=xlAscending, Header:=xlGuess, _
                    OrderCustom:=7, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
                    :=xlSortNormal

                Case "OBSERVATION"
                    For Counter = 1 To 9
                    ActiveCell.EntireRow.Cells(1, Counter).Interior.ColorIndex = 8
                    Next Counter
                    Selection.Sort Key1:=Range("C6"), Order1:=xlAscending, Header:=xlGuess, _
                    OrderCustom:=7, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
                    :=xlSortNormal

                Case "SLUT"
                    For Counter = 1 To 9
                    ActiveCell.EntireRow.Cells(1, Counter).Interior.ColorIndex = 46
                    Next Counter
                    Selection.Sort Key1:=Range("C6"), Order1:=xlAscending, Header:=xlGuess, _
                    OrderCustom:=7, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
                    :=xlSortNormal

                Case "ARKIV"
                    For Counter = 1 To 9
                    ActiveCell.EntireRow.Cells(1, Counter).Interior.ColorIndex = 46
                    Next Counter
                    DataEnd = DataArk.Range("A65536").End(xlUp).Row
                    For I = DataEnd To 4 Step -1
                        If DataArk.Cells(I, "C") = "Arkiv" Then    ' ret A til den kolonne der skal tjekkes på og "Arkiv", til det den skal finde
                            DataArk.Rows(I).Copy KopiArk.Range("A65536").End(xlUp).Offset(1, 0)    ' kopierer ræken over
                            DataArk.Rows(I).Delete    'Sletter rækken fra DataArk
                        End If
                    Next I

                Case Else
                    For Counter = 1 To 9
                    ActiveCell.EntireRow.Cells(1, Counter).Interior.ColorIndex = xlNone
                    Next Counter
            End Select
        Set DataArk = Nothing
        Set KopiArk = Nothing
        End With
  End With
End If

End Sub
Avatar billede kabbak Professor
25. maj 2006 - 12:10 #4
Private Sub Worksheet_Change(ByVal Target As Range)

Dim Counter As Integer
Dim r As Range
'Dim C As Range
Dim tmp() As Variant
Dim DataEnd As Long, DataArk As Object, I As Long, KopiArk As Object
 
Set DataArk = Worksheets("Ny opgave")    ' Ret til dit dataark
Set KopiArk = Worksheets("Afsluttet")    ' Ret til dit Arkivark
 
 
If Target.Column = 3 Then
  With Worksheets("Ny Opgave")
        With Target
            Select Case UCase(.Value)
                Case "NY"
                    For Counter = 1 To 9
                    ActiveCell.EntireRow.Cells(1, Counter).Interior.ColorIndex = 6
                    Next Counter
                    Selection.Sort Key1:=Range("C6"), Order1:=xlAscending, Header:=xlGuess, _
                    OrderCustom:=7, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
                    :=xlSortNormal

                Case "I GANG"
                    For Counter = 1 To 9
                    ActiveCell.EntireRow.Cells(1, Counter).Interior.ColorIndex = 43
                    Next Counter
                    Selection.Sort Key1:=Range("C6"), Order1:=xlAscending, Header:=xlGuess, _
                    OrderCustom:=7, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
                    :=xlSortNormal

                Case "OBSERVATION"
                    For Counter = 1 To 9
                    ActiveCell.EntireRow.Cells(1, Counter).Interior.ColorIndex = 8
                    Next Counter
                    Selection.Sort Key1:=Range("C6"), Order1:=xlAscending, Header:=xlGuess, _
                    OrderCustom:=7, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
                    :=xlSortNormal

                Case "SLUT"
                    For Counter = 1 To 9
                    ActiveCell.EntireRow.Cells(1, Counter).Interior.ColorIndex = 46
                    Next Counter
                    Selection.Sort Key1:=Range("C6"), Order1:=xlAscending, Header:=xlGuess, _
                    OrderCustom:=7, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
                    :=xlSortNormal

                Case "ARKIV"
                    For Counter = 1 To 9
                    ActiveCell.EntireRow.Cells(1, Counter).Interior.ColorIndex = 46
                    Next Counter
                   
                        If Target = "Arkiv" Then    ' ret A til den kolonne der skal tjekkes på og "Arkiv", til det den skal finde
                          DataArk.Rows(Target.Row).Copy KopiArk.Range("A65536").End(xlUp).Offset(1, 0)    ' kopierer ræken over
                          Application.EnableEvents = False
                          DataArk.Rows(Target.Row).Delete    'Sletter rækken fra DataArk
                         
                        End If

                Case Else
                    For Counter = 1 To 9
                    ActiveCell.EntireRow.Cells(1, Counter).Interior.ColorIndex = xlNone
                    Next Counter
            End Select
        Set DataArk = Nothing
        Set KopiArk = Nothing
        End With
  End With
End If
Application.EnableEvents = True
End Sub
Avatar billede cjeskovby Nybegynder
28. maj 2006 - 10:39 #5
Tak for hjælpen Kabbak
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