Avatar billede mile Juniormester
04. december 2003 - 09:22 Der 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 ?
Avatar billede mile Juniormester
04. december 2003 - 09:24 #1
Jeg skal til møde resten af dagen, så det er ikke for at være uhøftlig hvis jeg ikke lige svarer på de forslag jeg håber at der kommer :-)
Avatar billede bak Forsker
04. december 2003 - 17:19 #2
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.
Avatar billede mile Juniormester
05. december 2003 - 09:27 #3
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.
Avatar billede bak Forsker
05. december 2003 - 12:37 #4
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.
Avatar billede mile Juniormester
05. december 2003 - 13:02 #5
?

Det gør så vidt jeg ved ikke noget hvis man skal klikke bestemt sted, inden man aktiverer makroen ....
Avatar billede bak Forsker
05. december 2003 - 15:38 #6
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
Avatar billede mile Juniormester
08. december 2003 - 09:18 #7
Hej Bak

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....
Avatar billede mile Juniormester
08. december 2003 - 10:34 #8
Hej Bak

Nå - det var cellerne D:S han vil have med over. Kan koden ændres til det ? På forhånd tak...

PS: et lille ønske mere - kan den indsættes uden formattering ?

(der ligger nemlig noget betinget formattering på det ark, der kopieres fra, og det hele bliver så grønt når det indsættes i ny fil :-)
Avatar billede mile Juniormester
08. december 2003 - 10:34 #9
Øh - der er ikke formler i, så en indsæt speciel - værdier - vil godt kunne anvendes her.
Avatar billede bak Forsker
08. december 2003 - 13:49 #10
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
   
End Sub
Avatar billede mile Juniormester
08. december 2003 - 13:52 #11
Det ser simpelthen ud til at virke perfekt....Jeg ser lige om ham der skal bruge det bliver ligeså imponeret :-)
Avatar billede mile Juniormester
08. december 2003 - 14:00 #12
Det er bare for godt - lægger du lige et svar så du kan få nogle velfortjente points ??
Avatar billede bak Forsker
08. december 2003 - 14:11 #13
ok, godt det funker :-)
Avatar billede mile Juniormester
08. december 2003 - 14:12 #14
Tak for hjælpen....
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