Avatar billede mefa Seniormester
17. marts 2025 - 12:45 Der er 14 kommentarer og
1 løsning

Hjælp til vba

Hjælp til vba

Det er min debut i vba

Jeg har tekst a5, b5 og c5 og så er mit store ønske, at hvis jeg skriver "løst" i e5 så slettes række 5.

På forhånd tak
Avatar billede kulawig Guru
17. marts 2025 - 13:06 #1
skal linje 5 slettes så linje 6 bliver den nye 5 ... eller skal indholdet bare ryddes ??
så der er en tom linje 5

mvh
Avatar billede mefa Seniormester
17. marts 2025 - 13:16 #2
Linie 6 skal blive linie 5
Avatar billede kulawig Guru
17. marts 2025 - 13:21 #3
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)
Avatar billede madklub Guru
17. marts 2025 - 13:25 #4
Kan makroen ikke køre når der trykkes ENTER ?
Eller man kunne vælge 'løst' fra en liste.
Avatar billede mefa Seniormester
17. marts 2025 - 13:37 #5
Det skal være den ressourcevenlige version
Avatar billede kulawig Guru
17. marts 2025 - 13:40 #6
Det her virker :


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
Avatar billede mefa Seniormester
17. marts 2025 - 13:43 #7
Glædelig mig til prøve det i aften
Avatar billede kim1a Ekspert
17. marts 2025 - 14:17 #8
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 :-)
Avatar billede kulawig Guru
17. marts 2025 - 14:21 #9
slet ikke dumt ... du tænker klippe den ud af "ARK1" og flytte over i et skjult ark der hedder "LØST"
Avatar billede mefa Seniormester
17. marts 2025 - 14:29 #10
Det er kun mig selv som bruger arket,  så der ikke mulighed for snyd.
Det skal bruges i  en "opgaveliste" med forskellige deadline.
Avatar billede kulawig Guru
17. marts 2025 - 14:42 #11
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
Avatar billede kim1a Ekspert
17. marts 2025 - 14:44 #12
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.
Avatar billede Jan Hansen Ekspert
17. marts 2025 - 19:33 #13
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:

mvh Jan
Avatar billede mefa Seniormester
18. marts 2025 - 07:29 #14
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.
Avatar billede mefa Seniormester
21. marts 2025 - 18:10 #15
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
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
Stort udvalg af Excel kurser til alle niveauer og jobfunktioner

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