altså det kan godt lade sig gøre , men VBA kan ikke køre aktivt hele tiden ... det vil koste for mange ressourcer.
der er to muligheder 1. VBA køre en gang i minuttet og fjerner linjer med løst 2. du skriver løst i dine linjer og trykker på en Marko knap der fjerner alle linjer med løst (den mest resurse venlige)
Sub SletLøstRækker() Dim ws As Worksheet Dim rng As Range Dim cell As Range Dim lastRow As Long
' Vælg det aktive ark Set ws = ActiveSheet
' Find den sidste brugte række i kolonne E lastRow = ws.Cells(ws.Rows.Count, 5).End(xlUp).Row
' Gennemgå rækker baglæns for at undgå problemer med rækkeindekset For i = lastRow To 1 Step -1 If LCase(ws.Cells(i, 5).Value) = "løst" Then ws.Rows(i).Delete End If Next i
MsgBox "Rækker med 'løst' i kolonne E er blevet slettet.", vbInformation, "Færdig" End Sub
Må jeg spagfærdigt foreslå at den kopiere linjen et andet sted hen, f.eks. en skjult fane - ellers vil det jo være nemt at påstå det er løst når det ikke er der :-)
den her kan godt renses lidt ud .. det er en copy/paste fra noget andet ... fjern evt ark oprettelsen og kontrollen af tilstedeværelsen af "LØST" så bliver det lidt pænere
Sub FlytLøstRækker() Dim wsSource As Worksheet Dim wsDest As Worksheet Dim rng As Range Dim cell As Range Dim lastRow As Long Dim destRow As Long Dim i As Long
' Definer kildearket (det aktive ark) Set wsSource = ActiveSheet
' Tjek om arket "LØST" findes, ellers opret det On Error Resume Next Set wsDest = ThisWorkbook.Sheets("LØST") If wsDest Is Nothing Then Set wsDest = ThisWorkbook.Sheets.Add wsDest.Name = "LØST" End If On Error GoTo 0
' Find den sidste brugte række i kildearkets kolonne E lastRow = wsSource.Cells(wsSource.Rows.Count, 5).End(xlUp).Row
' Find den næste ledige række i "LØST"-arket destRow = wsDest.Cells(wsDest.Rows.Count, 1).End(xlUp).Row + 1
' Gennemgå rækker baglæns for at undgå problemer med rækkeindekset For i = lastRow To 1 Step -1 If LCase(wsSource.Cells(i, 5).Value) = "løst" Then ' Kopier hele rækken til "LØST" wsSource.Rows(i).Copy wsDest.Rows(destRow) ' Slet rækken fra kildedokumentet wsSource.Rows(i).Delete ' Opdater næste ledige række i "LØST" destRow = destRow + 1 End If Next i
MsgBox "Rækker med 'løst' i kolonne E er blevet flyttet til arket 'LØST'.", vbInformation, "Færdig" End Sub
Jeg holder fast, ikke pga snyd, men sletning er nok ikke bedste vej frem på lang bane. Så kan du jo år til år slette i den anden fane manuelt en gang for alle.
Hvorfor ikke bruge en tabel og så filtrere "LØST" fra? Så er opgaverne usynlige når de er LØST men ikke væk. ingen vba og ikke tungt, og det sker øjeblikligt:
Tak for hjælpen og input. Jeg går med løsning #6#. Der er tale om en tabel som kun bruges af mig til holde styr på arbejdsopgaver fra driften og telefonsedler m.v.
Nogen kan først laves færdig en specifik dato, opgaver som venter svar fra andre, noget skal bare laves men ikke nødvendigvis i dag eller undersøges nærmere. Når jeg har løst opgaven har jeg ikke brug for finde den igen. Det er nok i virkeligheden bare en "elektronisk blok" hvor jeg ville strege opgaverne ud når de er løst og når alle opgaver på siden var løst så ville jeg smide siden i skraldespanden. Nogen vil sikkert tænke spild af tid, men det virker for mig.
Efter at have tænkt over jeres input har jeg valgt at lave et ark hvor de løste opgaver flyttes til. Hvis andre kan få glæde af løsningen så er den her.
Sub FlytOgSletRækkeHvisLøst() Dim rng As Range Dim i As Long Dim destination As Worksheet Dim kildedata As Worksheet Dim sidsteRække As Long
' Angiv arket med data og arket med løste opgaver Set kildedata = Worksheets("Opgaveliste") Set destination = Worksheets("Løste Opgaver")
' Tjek om arknavne findes If kildedata Is Nothing Or destination Is Nothing Then MsgBox "Tjek arknavne - 'Opgaveliste' eller 'Løste Opgaver' findes ikke!", vbCritical Exit Sub End If
' Angiv område Set rng = kildedata.Range("e8:e50") ' Juster området efter behov sidsteRække = destination.Cells(destination.Rows.Count, 1).End(xlUp).Row + 1
' Loop baglæns gennem rækker For i = rng.Rows.Count To 1 Step -1 ' Ignorer tomme celler og tjek for "løst" If Not IsEmpty(rng.Cells(i, 1).Value) And CStr(rng.Cells(i, 1).Value) = "løst" Then ' Flyt række til "Løste Opgaver" kildedata.Rows(rng.Cells(i, 1).Row).Copy destination:=destination.Cells(sidsteRække, 1) ' Indsæt dato i kolonne f i "Løste Opgaver" destination.Cells(sidsteRække, 6).Value = Date ' Slet række fra "Opgaveliste" kildedata.Rows(rng.Cells(i, 1).Row).Delete ' Opdater næste ledige række sidsteRække = sidsteRække + 1 End If Next i End Sub
Synes godt om
1 synes godt om dette
Ny brugerNybegynder
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.