Avatar billede mrkr Juniormester
21. juli 2010 - 23:07 Der er 8 kommentarer og
1 løsning

flytte en linje fra et ark til en andet via vba

Jeg har 2 ark, "åbne" + "lukkede"

I arket Åbne er der pt 10.000 linjer og der kommer løbende flere linjer.
Derfor har jeg brug for en kodestump der kan flytte linjer fra et arket "åbne" til arket "Lukkede".

Der står enten Ja eller Nej i kolonne F og de står blandet.

Jeg er ikke interesseret i at sortere arket, så det jeg har brug for er at koden "plukker" de enkelte linjer ud og sletter dem, så der ikke kommer "huller" i arket "åbne".

Koden skal altså:
1. kigge i arket "Åbne" og finde første linje med "Ja" i kol F
2. kopiere og slette linjen fra arket Åbne
3. Indsætte linjen i den første ledige linje i arket Lukkede
4. Lede efter den næste linje med Ja ...... osv.

Jeg har selv rodet med det men koden blev helt uhjælpelig og jeg kunne ikke få den til at virke.

Er der nogle af jer eksperter der kan?
Avatar billede supertekst Ekspert
21. juli 2010 - 23:26 #1
Hvis du sender et lille uddrag af filen - så skal jeg se på det.

@-adresse under profil.

ps.: der er vist nogle svar der venter på "afslutning"
Avatar billede supertekst Ekspert
22. juli 2010 - 00:10 #2
VBA-koden kan anbringes under arket Åbne

Dim arkÅ As Worksheet, rækÅ As Long, antalRækÅ As Long
Dim arkL As Worksheet, rækL As Long
Public Sub overførJaRækker()
    Set arkÅ = ActiveWorkbook.Sheets("Åbne")
    Set arkL = ActiveWorkbook.Sheets("Lukkede")
   
    antalRækÅ = findAntalRæk(arkÅ)
    rækL = findAntalRæk(arkL) + 1
   
    arkÅ.Select
   
    Application.ScreenUpdating = False
   
    For rækÅ = 1 To antalRækÅ
        If LCase(Range("F" & CStr(rækÅ))) = "ja" Then
            Rows(rækÅ).Select
            Selection.Copy
            indsætIlukkede
                     
            arkÅ.Select
            Selection.Delete Shift:=xlUp
            rækÅ = rækÅ - 1
        End If
    Next rækÅ
   
    Application.ScreenUpdating = True
    arkÅ.Select
End Sub
Private Function findAntalRæk(arkNavn)
    arkNavn.Select
    findAntalRæk = ActiveCell.SpecialCells(xlLastCell).Row
End Function
Private Sub indsætIlukkede()
    arkL.Select
    ActiveSheet.Rows(CStr(rækL) & ":" & CStr(rækL)).Select
    Selection.Insert Shift:=xlDown
    Application.CutCopyMode = False
   
    rækL = rækL + 1
End Sub
Avatar billede mrkr Juniormester
24. juli 2010 - 00:05 #3
Den virker lige som jeg ønskede.
Mange tak.

Det ark jeg har dataene liggende i har jeg en del små makroer som jeg inddelt i forskellige "modules" så jeg nemt kan finde frem til dem.

Som koden er skrevet her skal den gemmes under arket Åbne.
Kan man rette den til, så den kan gemmes under et "module" i stedet?
Avatar billede supertekst Ekspert
24. juli 2010 - 11:20 #4
selv tak - når du har accepteret - så retter jeg til det ønskede..
Avatar billede mrkr Juniormester
24. juli 2010 - 11:28 #5
Sorry... :-)
Tak for hjælpen.
Avatar billede supertekst Ekspert
24. juli 2010 - 11:40 #6
ok - selv tak - vender tilbage..
Avatar billede supertekst Ekspert
24. juli 2010 - 11:51 #7
Har prøvet at flytte til et module og afvikle koden uden problemer...
Avatar billede mrkr Juniormester
24. juli 2010 - 12:04 #8
Ja, det gør den også ved mig.

Havde slet ikke testet det, da jeg var helt sikker på at når der var noget med "private sub", så skulle koden være direkte i arket.

Men det viser jo bare at jeg ikke har den helt grundlæggende forståelse for vba-kode.

Beklager ulejligheden.
Avatar billede supertekst Ekspert
24. juli 2010 - 12:11 #9
Læg mærke til at kodens hovedprocedure er "Public" - denne kan ses fra selve arket (Alt+F8) mens "Private" Sub og Funtion - kun anvendes inden for "egne rammer".
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