Avatar billede Dorte Mester
26. august 2024 - 13:37 Der er 13 kommentarer

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 :-)
Avatar billede MaxZpaD Guru
26. august 2024 - 13:44 #1
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 :-)
Avatar billede Dorte Mester
26. august 2024 - 14:00 #2
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 :-)
Avatar billede MaxZpaD Guru
26. august 2024 - 14:35 #3
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.
Avatar billede Dorte Mester
26. august 2024 - 14:47 #4
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.
Avatar billede MaxZpaD Guru
26. august 2024 - 15:28 #5
Ok - så prøv med denne kode.

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
Avatar billede Dorte Mester
27. august 2024 - 10:00 #6
Tak for koden :-)
Jeg ser om jeg kan få noget ud af det, selvom det ser lidt svært ud.
Mange tak for hjælpen :-)
Avatar billede Dorte Mester
27. august 2024 - 11:20 #7
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 ?
Avatar billede MaxZpaD Guru
27. august 2024 - 12:04 #8
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
Avatar billede Dorte Mester
27. august 2024 - 13:10 #9
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 :-)
Avatar billede MaxZpaD Guru
27. august 2024 - 13:56 #10
Jeg sender dig lige en privat besked for yderligere fejlfinding vedr. #REFERENCE!
Avatar billede MaxZpaD Guru
27. august 2024 - 15:58 #11
Hej Dorte

Jeg sender som lovet den omskrevne makro her:

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
Avatar billede Dorte Mester
28. august 2024 - 07:49 #12
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.
Avatar billede MaxZpaD Guru
28. august 2024 - 07:53 #13
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.
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