21. december 2007 - 13:51Der er
6 kommentarer og 1 løsning
Hente specifikke rækker (Kabbak den kan du hurtigt klare)
Det første af nedenstående kode er ok..
Jeg skal bare have den til at vælge fra C46 til N46 på det ark jeg kopiere fra og indsætte det i C46 til N46 i det andet ark.
Det eneste jeg får overført er True.. Hvorfor kopiere den ikke dataene??
Samt hvorfor sætter den ikke dataene in i række 46 kolonne c og ud efter?
Sub GetAllData() Dim FS As FileSearch Dim FilePath As String, FileSpec As String Dim i As Long Dim v As Variant Dim rTarget As Long Dim ToSheet As Worksheet Dim Data As Variant '****************************** FilePath = "J:\Test" 'Stien hvor arkene skal hente fra. FileSpec = ".xls" Set ToSheet = ThisWorkbook.Worksheets("sheet1") 'OVerføres til et bestemt ark '****************************** 'find excel filerne Set FS = Application.FileSearch With FS .LookIn = FilePath .Filename = FileSpec .SearchSubFolders = False 'skal underfoldere også søges .Execute If .FoundFiles.Count = 0 Then MsgBox ("Ingen filer fundet") Exit Sub End If End With 'hent data Application.ScreenUpdating = False For i = 1 To FS.FoundFiles.Count rTarget = ToSheet.Range("C46:N46").Row Workbooks.Open Filename:=FS.FoundFiles(i), ReadOnly:=True ' åbnes som skrivebeskyttet With Worksheets("sheet1") ' Navnet på arket der hentes fra Data = .Range("C46:n46").Copy ToSheet.Cells(rTarget, "c") = Data End With ActiveWorkbook.Close False Next Application.ScreenUpdating = True End Sub
Har set lidt på anden del "hent data" og har pillet lidt i koden - har kun anvendt een testfil:
Const testStiFil = "C:\Documents and Settings\pb\Skrivebord\2112_Excel\kilde.xls"
'hent data Application.ScreenUpdating = False ' For i = 1 To FS.FoundFiles.Count rTarget = ToSheet.Range("C46:N46").Row
Workbooks.Open Filename:=testStiFil, ReadOnly:=True ' åbnes som skrivebeskyttet With Worksheets("ark1") ' Navnet på arket der hentes fra .Range("C46:n46").Select Selection.Copy ActiveWorkbook.Close False
ToSheet.Activate ActiveSheet.Range("C46").Select ActiveSheet.Paste Application.CutCopyMode = False End With ' Next Application.ScreenUpdating = True End Sub
Da den er beregnet til at hente fra flere filer, skal den vel ikke sætte ind samme sted.
Sub GetAllData() Dim FS As FileSearch Dim FilePath As String, FileSpec As String Dim i As Long Dim v As Variant Dim rTarget As Long Dim ToSheet As Worksheet Dim Data As Variant '****************************** FilePath = "C:\Test" 'Stien hvor arkene skal hente fra. FileSpec = ".xls" Set ToSheet = ThisWorkbook.Worksheets("sheet1") 'OVerføres til et bestemt ark '****************************** 'find excel filerne Set FS = Application.FileSearch With FS .LookIn = FilePath .Filename = FileSpec .SearchSubFolders = False 'skal underfoldere også søges .Execute If .FoundFiles.Count = 0 Then MsgBox ("Ingen filer fundet") Exit Sub End If End With 'hent data Application.ScreenUpdating = False For i = 1 To FS.FoundFiles.Count 'ToSheet.rTarget = ToSheet.Range("C46:N46").Row rTarget = ToSheet.Range("C65536").End(xlUp).Row Workbooks.Open Filename:=FS.FoundFiles(i), ReadOnly:=True ' åbnes som skrivebeskyttet With Worksheets("sheet1") ' Navnet på arket der hentes fra Data = .Range("C46:n46") ToSheet.Cells(rTarget, "c").Resize(UBound(Data, 1), UBound(Data, 2)) = Data End With ActiveWorkbook.Saved = True ActiveWorkbook.Close False Next Application.ScreenUpdating = True End Sub
Kabbak - nej det er rigtigt, dataene skal ikke ind på samme sted. Men jeg tænkte på at lave en masse af de der with/end for hver område der skal hentes og flyttes over..
Årsagen er som følgende..
Hvert år bliver der lavet en skabelon (eller rettere den gamle bliver justeret) som danner grundlag for rigtige mange indberetninger. I skabelonen er der områder der er markeret gult som skal udfyldes.
Når skabelonen er lavet skal de gamle data flyttes over igen for tidligere år.
Fanebladene hedder det samme men det er ikke sikkert, at det er til de samme rækker og kolonner da skabelonen udbygges hvert år. Sidste års filer er ens og derfor kender jeg jo alle felterne de flyttes fra og hvor de skal hen..
Jeg tænkte så hvis man havde denne skabelon og lavede en masse with/end så ville man hurtigt kunne flytte dataene fra en fil af gangen.
Så i stedet for at sidde og kopiere og indsætte, så kan man danne en fil hurtigere med denne macro. Og på den måde få flytte dataene for en fil ad gangen.
Problemet er jo lidt at skabelonen skal kopieres lige så mange gange som der er filer..
Men kan man evt. placere macroen i en anden fil og så sætte den til at kopiere skabelonen først - indsætte dataerne fra fil_1 - gemme den - opret ny skabelon - hente dataene fra fil_2 osv... Alle filer ligger i samme mappen/sti..
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.