Hente celle C1 fra mange forskellige excel filer fra samme sti
Hej Hvordan gør jeg dette nemmest: Jeg har en bestemt sti (f.eks: 3588\Tegninger\Stykliste, hvor der ligger en masse filer (f.eks 10300.xlsx, 10302.xlsx, 10305.xlsx, 10400.xlsx, 10450.xlsx). Jeg vil gerne hente celle C1 fra fanen kørsel, fra alle disse filer, ind i et nyt regneark. Kan man det ? og hvordan gør man uden at skulle rette formlerne til filernes navne manuelt ? På forhånd tak :-)
Kan det være et forskelligt antal Excel-filer fra gang til gang?
Ligger der evt. andre Excel-filer i mappen end lige dem, du vil hente data fra?
Hvor i det nye regneark skal oplysningerne fra alle C1-cellerne ind, fx fra celle A1 og nedad i ark "Ny liste" eller fra celle C18 og udad mod højre i ark "Styklister" (det er bare nogle tilfældige arknavne, jeg har indsat)?
Det kan godt lade sig gøre at hente de ønskede data, men der ligger umiddelbart mere i processen fra start til slut :-)
Hej Ja, det er et forskelligt antal filer fra gang til gang. Nej, der ligger kun de filer der skal hentes data fra. De må gerne ligge fra celle A1 og ned.
Hvis det er alt for svært, duer det nok ikke. Men jeg vil da gerne høre dit forslag :-)
Når det skal foregå med et arbitrært antal filer uden at skulle rette "formlerne til filernes navne" manuelt, så ville jeg løse det med en VBA-makro, der finder alle filerne i mappen og henter data fra C1 i hver af dem. Jeg kender ikke til nogle "simple" formelfunktioner, der kan løse opgaven.
Tak for det :-) Jeg har arbejdet med makroer - jeg optager det meste af det, og retter lidt til. Så hvis ikke det er for stort et arbejde for dig, må du skrive en makro kode til mig. Så kan jeg se om jeg kan få det til at fungere.
Sub sub_hent_celle() Dim str_mappe As String Dim str_fil As String Dim str_fane As String Dim str_celle As String Dim var_celle As Variant Dim i_fil_antal As Integer 'Skriv filstien i Ark1 celle B2 (hvis navn på arkfane ændres, skal det også ændres i koden herunder) str_mappe = Sheets("Ark1").Range("B2") 'Skriv navn på arkfanerne (fx Kørsel) i celle B4 str_fane = Sheets("Ark1").Range("B4") 'Skriv celle-referencen (fx C1) i celle B6 str_celle = Sheets("Ark1").Range("B6") 'Find den første fil str_fil = Dir$(str_mappe & "\*.xlsx", vbNormal) 'Hvis en .xlsx-fil findes... If str_fil <> "" Then '... da gentag denne løkke Do i_fil_antal = i_fil_antal + 1 'Hent celleværdi fra det angivne ark var_celle = ExecuteExcel4Macro("'" & str_mappe & "\[" & str_fil & "]" & str_fane & "'!" & Range(str_celle).Address(True, True, -4150)) 'Skriv celleværdien ind i Ark2 i denne fil Sheets("Ark2").Cells(i_fil_antal, 1) = var_celle 'Find næste fil str_fil = Dir$ 'Bliv ved indtil alle filer er gennemløbet Loop Until str_fil = "" End If End Sub
Hej Igen Nu har jeg fået makroen til at køre. Der er ca. 681 filer den skal igennem, men den finder kun værdien i 7 stk. filer I resten af cellerne på ark2 står der #reference! (Jeg har tjekket at der står værdier i celle C1 på alle filerne) - Er det ikke mystisk, at den så kun henter 7 af værdierne. Kan du gennemskue det ?
Jeg har flyttet værdier fra Celle C1 til kolonne 2 på "ark2", fordi jeg gerne vil have hentet en tekst fra filerne til at stå foran (kolonne 1). Teksten skal hentes fra en anden fane i filen "Hoveddata" og det er celle P13. Fanenavn skriver jeg på "ark1" Celle B8 Cellenavn skriver jeg på "ark1" Celle B10 Har du mulighed for at lave koden til denne løkke ?
Det eneste, jeg kan komme på, som kan forårsage #REFERENCE-fejl i denne sammenhæng, er, at arkfanernes navne er forskellig fra "Kørsel", fx "Kørsel " med et ekstra mellemrum til sidst eller lignende. Hvis dette ikke er tilfældet, ved jeg ikke, hvad der forårsager det.
Opdateret kode, som henter tekst fra celle P13 i arket "Hoveddata" finder du neden for:
Sub sub_hent_celle() Dim str_mappe As String Dim str_fil As String Dim str_fane As String Dim str_fane_hoved As String Dim str_celle As String Dim str_celle_hoved As String Dim var_celle As Variant Dim var_celle_hoved As Variant Dim i_fil_antal As Integer 'Skriv filstien i Ark1 celle B2 (hvis navn på arkfane ændres, skal det også ændres i koden herunder) str_mappe = Sheets("Ark1").Range("B2") 'Skriv navn på arkfanerne (fx Kørsel) i celle B4 str_fane = Sheets("Ark1").Range("B4") str_fane_hoved = Sheets("Ark1").Range("B8") 'Skriv celle-referencen (fx C1) i celle B6 str_celle = Sheets("Ark1").Range("B6") str_celle_hoved = Sheets("Ark1").Range("B10") 'Find den første fil str_fil = Dir$(str_mappe & "\*.xlsx", vbNormal) 'Hvis en .xlsx-fil findes... If str_fil <> "" Then '... da gentag denne løkke Do i_fil_antal = i_fil_antal + 1 'Hent celleværdi fra det angivne ark var_celle = ExecuteExcel4Macro("'" & str_mappe & "\[" & str_fil & "]" & str_fane & "'!" & Range(str_celle).Address(True, True, -4150)) var_celle_hoved = ExecuteExcel4Macro("'" & str_mappe & "\[" & str_fil & "]" & str_fane_hoved & "'!" & Range(str_celle_hoved).Address(True, True, -4150)) 'Skriv celleværdien ind i Ark2 i denne fil Sheets("Ark2").Cells(i_fil_antal, 1) = var_celle_hoved Sheets("Ark2").Cells(i_fil_antal, 2) = var_celle 'Find næste fil str_fil = Dir$ 'Bliv ved indtil alle filer er gennemløbet Loop Until str_fil = "" End If End Sub
Tusind tak :-) Men jeg har desværre ikke fundet ud af hvorfor den skriver "REFERENCE! på næsten alle filer. Det samme gælder for den nye celle P13, der skriver den "REFERENCE! på alle linjer.
Jeg må prøve mig lidt frem, der er nok ikke mere du kan gøre...... Men tak for alle dine input :-)
Sub sub_hent_celle_2() Dim str_mappe As String Dim str_fil As String Dim str_fane As String Dim str_fane_hoved As String Dim str_celle As String Dim str_celle_hoved As String Dim var_celle As Variant Dim var_celle_hoved As Variant Dim i_fil_antal As Integer 'Skriv filstien i Ark1 celle B2 (hvis navn på arkfane ændres, skal det også ændres i koden herunder) str_mappe = Sheets("Ark1").Range("B2") 'Skriv navn på arkfanerne (fx Kørsel) i celle B4 str_fane = Sheets("Ark1").Range("B4") str_fane_hoved = Sheets("Ark1").Range("B8") 'Skriv celle-referencen (fx C1) i celle B6 str_celle = Sheets("Ark1").Range("B6") str_celle_hoved = Sheets("Ark1").Range("B10") 'Find den første fil str_fil = Dir$(str_mappe & "\*.xlsx", vbNormal) 'Hvis en .xlsx-fil findes... If str_fil <> "" Then '... da gentag denne løkke Do i_fil_antal = i_fil_antal + 1 'Hent celleværdi fra det angivne ark var_celle = "'" & str_mappe & "\[" & str_fil & "]" & str_fane & "'!" & str_celle var_celle_hoved = "'" & str_mappe & "\[" & str_fil & "]" & str_fane_hoved & "'!" & str_celle_hoved 'Skriv celleværdien ind i Ark2 i denne fil Sheets("Ark2").Cells(i_fil_antal, 1).Formula = "=INDEX(" & var_celle_hoved & ",1,1)" Sheets("Ark2").Cells(i_fil_antal, 2).Formula = "=INDEX(" & var_celle & ",1,1)" 'Find næste fil str_fil = Dir$ 'Bliv ved indtil alle filer er gennemløbet Loop Until str_fil = "" End If End Sub
Tusind tak for dit forsøg på at hjælpe mig, men den nye kode virker heller ikke. Nu hentes der faktisk slet ingenting. Filerne der hentes fra vil altid være lukkede. Men jeg har prøvet at åbne et par stykker, for at se om den så hentede cellerne. Men det gør den heller ikke, hvis de er åbne.
Jeg sætter lige opgaven i bero, der er lige kommet et par andre haste opgaver her til morgen. Så må jeg se om jeg får mod på at kigge på det igen senere.
Okay - det var ærgerligt. Jeg tænker, at det næsten må være noget lokalt på din pc eller i jeres netværk, fordi begge makroer fungerer upåklageligt hos mig og med jeres egne filer.
Synes godt om
Ny brugerNybegynder
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.