04. december 2003 - 09:22Der er
13 kommentarer og 1 løsning
Automatisk kopiering af celler i ugrupperet område. VBA
Jeg fik for nylig hjælp til automatisk at gruppere noget ud fra dét der stod i kolonne a.
Jeg fik en fin liste med mange plusser ude i venstre side, som jeg så kan åbne, for at få vist detaljerne.
Nu er mit spørgsmål: Er det muligt at lave kode, der kan teste på dét der er ugrupperet i listen, tage eks. fra kolonne A til kolonne D (eks. A4;B4;C4;D4) i de rækker der er ugrupperet og kopiere indhold til ny fil ?
Jeg forstår ikke helt spørgsmålet, Mile. Har du nogen rækker der ikke er med i en gruppe? Man kan godt teste hvilket gruppeniveau en række har (1 er dem med plusserne, 2 er de skjulte) men en række der ikke er med i en gruppe har også niveau 1.
Der er tale om liste på ca. 20.000 rækker - disse rækker er grupperet, sådan ca. en 6-8 ad gangen. Hvis man så forstiller sig, at man har alle de der plusser ude i venstre side, og man klikker på ét af plusserne, hvorved man får udvidet en enkelt gruppe, så er ønsket at man vha. en makro automatisk kan kopiere cellerne A:D i de 6-8 rækker, og indsætte i nyt excel ark.
Det er jeg bange for ikke er muligt. Der er ikke tilknyttet nogen evnts / handlinger til det at udvide en gruppering.
Et forslag er at når man har udvidet på Plusset, kan man stille sig i første celle til højre for og højreklikke/dobbeltklikke på den og få kopieringen til at ske.
Denne kode indsættes i arkets eget kodemodul. Den overfører alle rækker (kolonne A:D) tilhørende et + til et nyt regneark.
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Dim rgCopy As Range Dim wbNew As Workbook Dim wsNew As Worksheet Dim i As Long If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("A:A")) Is Nothing And Len(Target.Value) > 0 Then Cancel = True i = 1 Do Until Target.Offset(i, 0).Rows.OutlineLevel = 1 'Or Target.Offset(i, 0).Rows.Hidden = True i = i + 1 Loop Set rgCopy = Range(Target, Target.Offset(i - 1, 3)) Set wbNew = Workbooks.Add Set wsNew = wbNew.Worksheets(1) rgCopy.Copy wsNew.Range("A1") End If End Sub
Umiddelbart ser det lovende ud, men jeg vil nu lige spørge ham om han mener det alvorligt med cellerne A:D, for det ser lidt underligt ud her. Jeg melder tilbage....
ok, denne tager højde for ændringerne. test den lige. den er lavet til dobbelklik, men det kan du sagtens selv ændre til rigthclick, hvis du ønsker det
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim rgCopy As Variant Dim wbNew As Workbook Dim wsNew As Worksheet Dim i%
If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("A:A")) Is Nothing And Len(Target.Value) > 0 Then Cancel = True Do Until Target.Offset(i% + 1, 0).Rows.OutlineLevel = 1 'Or Target.Offset(i, 0).Rows.Hidden = True i% = i% + 1 Loop rgCopy = Range(Target.Offset(, 3), Target.Offset(i%, 19)) Set wbNew = Workbooks.Add Set wsNew = wbNew.Worksheets(1) wsNew.Range(wsNew.Cells(1, 1), wsNew.Cells(UBound(rgCopy, 1), UBound(rgCopy, 2))) = rgCopy End If
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.