16. november 2011 - 10:58Der er
15 kommentarer og 1 løsning
Copy Paste Makro
Ved hjælp af filterfunktion fremsøges 6 rækker i et datasæt bestående af eksempelvis 10.000 rækker.
Makro ønske
Disse 6 ( hele )rækker skal kopieres og indsættes nederst i regnearket på de næste tomme rækker, endvidere skal indholdet i 3 af kolonnerne i de 6 nye rækker erstattes med ninformation .
On Error Resume Next With ActiveSheet.AutoFilter.range Set r2 = .Offset(1, 0).Resize(.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible) End With On Error GoTo 0
If r2 Is Nothing Then MsgBox "No data shown by filter" Else Set r = ActiveSheet.AutoFilter.range r.Offset(1, 0).Resize(r.Rows.Count - 1).Copy Destination:=r.Offset(r.Rows.Count, 0).Cells(1, 1) End If End Sub
Du mangler så at udvide filteret til også at omfatte de nye data (hvis ønsket) og kopiere de nye data ind. Er det de samme data for hver alle rækkerne og hvor kommer de data fra?
Data benyttes til prissammenligning i på et givent produkt.
Data består af et produkt med 6 forskellige priser afhængig af periode for et år. Alle produkter er altså repræsenteret 6 gange, med 6 priser for et givent år.
Disse 6 rækker skal kopieres ned i nyt område, hvorefter oplysninger om år ændres til nyt år, alle priser nulstilles og et statusfelt opdateres med oplysninger såsom "Videreført til nyt år"
Bruger skal herefter indtaste de nye priser for det pågældende produkt i de nye 6 rækker således at der efterfølgende kan laves en prissammenligning.
Sub CopyFilter() Dim r, r2, d As range Dim n As Long Dim cYear, cStatus, cPrice Dim tStatus As String
cYear = 1 cStatus = 3 cPrice = 6 tStatus = "Videført til nyt år"
On Error Resume Next With ActiveSheet.AutoFilter.range Set r2 = .Offset(1, 0).Resize(.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible) n = .Columns(1).SpecialCells(xlCellTypeVisible).Count - 1 End With On Error GoTo 0
If r2 Is Nothing Then MsgBox "No data shown by filter" Else MsgBox n Set r = ActiveSheet.AutoFilter.range Set d = r.Offset(r.Rows.Count, 0).Cells(1, 1) r.Offset(1, 0).Resize(r.Rows.Count - 1).Copy Destination:=d d.Offset(0, cYear).Resize(n).Value = year(Date) d.Offset(0, cStatus).Resize(n).Value = tStatus d.Offset(0, cPrice).Resize(n).Clear End If End Sub
Denne her antager, at år, status og pris står i hhv kolonnerne 1, 3 og 6 i dit filter-område. Den sætter året til det aktuelle år, Status til den angivne tekst og sletter prisen.
Hmm - jeg må havet testet det inden det var færdigt. Jeg får fejl hvis der ikke er noget autofilter eller hvis 0 rækker er valgt. Det kan løses ved at tilføje
Ved ikke om det virker, men tester ved lejlighed. Det er ikke så relevant idet Copy funktionen / makroen kun kan aktiveres såfremt der er fremsøgt noget brugbart :-)
Det var også min umiddelbare konklussion, men lige hvor i koden dette skal rettes kan jeg ikke se ( se koden )
Har forsøgt med Dim r AS Long, r2 As Long, d As Range
Sub CopyFilter() Dim r, r2, d As Range Dim n As Long Dim cYear, cStatus, cPage, cPrice Dim tStatus As String cYear = 2 cStatus = 13 cPage = 3 cPrice = 11 tStatus = "Fortsat i 2012"
On Error Resume Next With ActiveSheet.AutoFilter.Range Set r2 = .Offset(1, 0).Resize(.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible) n = .Columns(1).SpecialCells(xlCellTypeVisible).Count - 1 End With On Error GoTo 0
If r2 Is Nothing Then MsgBox "Ingen husdate data valgt !!!" Else 'MsgBox n Set r = ActiveSheet.AutoFilter.Range Set d = r.Offset(r.Rows.Count, 0).Cells(1, 1) r.Offset(1, 0).Resize(r.Rows.Count - 1).Copy Destination:=d r.Offset(1, 0).Resize(r.Rows.Count - 1).Interior.ColorIndex = 15 'New d.Offset(0, cYear).Resize(n).Value = 2012 d.Offset(0, cStatus).Resize(n).Value = tStatus d.Offset(0, cPage).Resize(n).Clear d.Offset(0, cPrice).Resize(n).Clear
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.