09. april 2007 - 16:11
Der er
6 kommentarer og
1 løsning
Hvor svært kan det være at slette 20 rækker
Hej
Jeg har brugt 2 timer på at finde ud af at slette 20 rækker, men jeg kan ikke finde ud af det ?
Range("F2").End(xlDown).Offset(1, 0).Select
Selection.EntireRow.Delete (Det var en række der blev slettet)
Men jeg skal slette 20 rækker fordi der står noget i de andre kolonner efter sidste celle i kolonne F
Håber på lidt hjælp
09. april 2007 - 17:07
#1
Set objRange = Range("F2").End(xlDown).Offset(1, 0)
Range(objRange, objRange.Offset(19)).EntireRow.Delete
Set objRange = Nothing
09. april 2007 - 20:00
#5
Hvad mener du med, at Offset(1,0) bliver til F3? Det skulle meget gerne blive den sidste celle i F-kolonnen + 1
10. april 2007 - 17:45
#6
Hej
Ja, det var mig der var noget galt med og det var på grund af der var flere tomme celler ind i mellem, sorry
Vil du ikke godt forklare hvad Set objRange, for jeg er ikke helt med på hvad den gør ?
10. april 2007 - 18:30
#7
Jeg vil prøve. Det er faktisk lidt som en container. Jeg har noget, som jeg gerne vil bruge flere gange, så jeg propper det ind i en container og jeg kan så bruge det, der ligger i containeren flere gange (og så er jeg i øvrigt sikker på at have fat i det hele tiden, også selv om jeg ændrer andre ting via kode).
Hvis du kigger på linjen:
Range(objRange, objRange.Offset(19)).EntireRow.Delete
kan du se, at jeg bruger objRange 2 gange i samme linje. Hvis jeg ikke havde brugt set objRange =, skulle jeg i stedet have skrevet:
Range(Range("F2").End(xlDown).Offset(1,0), Range("F2").End(xlDown).Offset(1,0).offset(19)).EntireRow.Delete
(ville så nok have lavet det en smule anderledes, men samme idé).
Jeg gør det samme, når jeg arbejder med Workbooks, Sheets osv. Lad os nu sige, at du har en Excel-fil med kode, der åbner en anden Excel-fil. Så ville jeg f.eks. skrive følgende:
Set objWB = ActiveWorkbook (her har jeg så fat i den fil, der er aktiv lige nu)
set objNewWB = Workbooks.Open "c:\Dataark.xls" (nu har jeg fat i den nye fil, som samtidig er blevet åbnet)
På den måde kan jeg bruge objWB og objNewWB i stedet for ActiveWorkbook (som jeg måske ender med ikke at have styr på).
Det samme gør sig gældende med f.eks. rækker, celler osv. Her er det "bare" et range, som jeg bruger (som ovenfor). Når først jeg har sat et Range, kan jeg næsten gøre med det, hvad jeg har lyst til - og uden at gøre brug af activate, select osv.
Giver det mening?
Prøv i øvrigt at køre ovenstående kode, hvor du sætter et BreakPoint i linjen efter Set objRange. Når koden stopper, højreklikker du på objRange, vælg derefter Add Watch, og så OK. Så dukker der en hel masse information op omkring dit Range-objekt (som det så hedder).
Og så det afsluttende: Den sidste linje med Set objRange = Nothing er vigtig, fordi du på den måde tømmer containeren (hukommelsen), så det ikke ligger og fylder op.
Det er lidt svært at forklare, men du er meget velkommen til at spørge mere ind, hvis du har lyst til det.