Avatar billede olehen Nybegynder
21. december 2007 - 13:51 Der 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
Avatar billede olehen Nybegynder
21. december 2007 - 13:53 #1
Når jeg henter filen frem og den åbner den, så spørger den hele tiden om den skal opdatere den fil den henter frem.. Kan jeg komme uden om dette?
Avatar billede supertekst Ekspert
21. december 2007 - 15:26 #2
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
Avatar billede kabbak Professor
21. december 2007 - 15:35 #3
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
Avatar billede olehen Nybegynder
21. december 2007 - 17:49 #4
Supertekst - jeg prøver lige din kode..

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..
Avatar billede kabbak Professor
21. december 2007 - 19:07 #5
Jeg skal i byen, så jeg har ikke tid nu.

men linjen
rTarget = ToSheet.Range("C65536").End(xlUp).Row

skal være

rTarget = ToSheet.Range("C65536").End(xlUp).Row +1
Avatar billede olehen Nybegynder
21. februar 2008 - 00:04 #6
Hej Kabbak,

smid et svar så får du pointene.. Er kommet videre siden da..
Avatar billede kabbak Professor
21. februar 2008 - 08:15 #7
et svar ;-))
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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