Avatar billede mile Juniormester
27. oktober 2017 - 09:32 Der er 4 kommentarer og
1 løsning

VBA kode til flytning af indhold fra ark 2 --------------------> sidste ark

Hej
Er der nogen der kan lave en stump kode der flytter indhold fra efterfølgende ark til celler i ark 1?

Eks. Ark1 = Fedtmule
        Ark2 = Anders And
        Ark 3 = Georg Gearløs
osv.

En kode der tager Arknavn og indsætter som overskrift i næste tomme celler i Ark Fedtmule og dernæst tager indhold af ark (eks. Anders And) og indsætter det under overskriften Anders And i arket Fedtmule.

Fortsætter til næste ark Georg Gearløs - indsætter arknavnet ved næste tomme celler i Fedtmule og dernæst indsætter data fra Georg Gearløs under overskrifte Georg Gearløs i arket Fedtmule.

OSV-
Avatar billede excelent Ekspert
28. oktober 2017 - 17:27 #1
Prøv denne på en kopi :

Sub samleArk()

Dim rk As Long, rk1 As Long, t As Long
Set sh = Sheets(1): rk1 = 1

For t = 2 To Sheets.Count
  Sheets(t).Select
    Range(Range("A1"), ActiveCell.SpecialCells(xlLastCell)).Select
    rk = Selection.Rows.Count
    sh.Cells(rk1, 1) = Sheets(t).Name
  Selection.Copy sh.Cells(rk1 + 1, 1)
rk1 = rk1 + rk + 3
Cells(1, 1).Select
Next

sh.Select

End Sub

Hvis du får store mellemrum imellem data fra dine ark, skyldes det
sikkert at din "usedrange" i arkene ikke svarer til faktisk brugt område.
Dvs. at du måske har haft værdier i nogle celler, som siden er blevet
slettet. Prøv at taste CTRL+HOME efterfulgt af CTRL+SHIFT+END
Så får du markeret det område som Excel tror er i brug men rent faktisk
er blevet delvist slettet.
Du kan resette dette manuelt eller via kode
Sig til hvis du skal bruge en makro til dette
Avatar billede Jan Hansen Ekspert
28. oktober 2017 - 17:29 #2
Prøv denne kode:

Option Explicit
Dim ws As Worksheet, rColumnA As Range, iCount As Integer, Holder() As Variant, Area As Range


Sub test()
    Set ws = ActiveSheet
    Set rColumnA = ws.Range("A1")
    For iCount = 2 To Sheets.Count
        If Not rColumnA.Offset(1, 0) = "" Then
            Set rColumnA = rColumnA.End(xlDown).Offset(1, 0)
        End If
        rColumnA.Value = Sheets(iCount).Name
        Holder = Sheets(iCount).UsedRange.Value
        Set Area = Range(rColumnA.Offset(1, 0), rColumnA.Offset(UBound(Holder, 1), UBound(Holder, 2) - 1))
        Area = Holder
    Next
End Sub
Avatar billede mile Juniormester
30. oktober 2017 - 08:49 #3
Excelent - din makro virkede fint. Der kom nogle tomme linier, men dem fjernede jeg manuelt.

Ja din makro gav en debug fejl i denne linie:

    Holder = Sheets(iCount).UsedRange.Value

Men 1000 tak til jer begge to.
Avatar billede mile Juniormester
30. oktober 2017 - 08:50 #4
Jan din makro gav en debug fejl i denne linie:

Holder = Sheets(iCount).UsedRange.Value

Men 1000 tak til jer begge to.
Avatar billede Jan Hansen Ekspert
30. oktober 2017 - 12:45 #5
problemet er nok UsedRange
test evt med :
Sheets(iCount).UsedRange.select
msgbox "Hej"

indsættes før " Holder = Sheets(iCount).UsedRange.Value"
og se hvad der bliver markeret

det fungerede her dag jeg lavede en test fil!!

Jan
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

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