Avatar billede micplus Nybegynder
10. juli 2007 - 10:27 Der er 15 kommentarer og
1 løsning

hente værdi i anden fil

Hej

Jeg skal i celle B1 bruget et tal, hentet fra en anden fil i samme mappe. Filnavnet afhænger af A1 i første ark.

dvs.

A1 = ok, B1 = '[ok.xls]tabel'!$B$19
A2 = sovs, B2 = '[sovs.xls]tabel'!$B$19

pft
Avatar billede dkmornie Nybegynder
10. juli 2007 - 11:05 #1
Hvad med denne makro?

Dim Row, Column

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    Set fs = CreateObject("scripting.filesystemobject")
    If Target.Column = 1 And (Row <> Target.Row Or Column <> Target.Column) And fs.fileexists(ActiveWorkbook.Path & "\" & Target & ".xls") = True Then
        Row = Target.Row
        Column = Target.Column
        Cells(Target.Row, 2).Formula = "=[" & Target & ".xls]sheet1!b" & Target.Row
    Else
        Column = 0
        Row = 0
    End If
End Sub
Avatar billede micplus Nybegynder
10. juli 2007 - 11:32 #2
hmm ... den får jeg ikke til at virke - kan ikke få den til at køre.
10. juli 2007 - 11:37 #3
Brug INDIREKTE()-funktionen.
=INDIREKTE("'["&A1&".xls]tabel'!$B$19")
10. juli 2007 - 11:38 #4
Du får den med mellemrum mellem de enkelte tegn - det gør det lettere at læse:
=INDIREKTE( " ' [ " & A1 & " .xls]tabel ' ! $B$19")
Avatar billede micplus Nybegynder
10. juli 2007 - 12:34 #5
jo, mit eneste problem er bare, at de andre filer skal være åbne. Er det ikke muligt at komme rundt om dette?
Avatar billede supertekst Ekspert
11. juli 2007 - 23:44 #6
Forslag - koden anbringes i Ark1 i den fil, der skal modtage:

Dim xsti, antalRæk, xls, filNavn
Sub hentFraFiler()
Rem Hent aktuelle sti
    xsti = ActiveWorkbook.Path
    If Right(xsti, 1) <> "\" Then
        xsti = xsti + "\"
    End If
   
Rem find antal rækker
    antalRæk = ActiveCell.SpecialCells(xlLastCell).Row
   
Rem Gennemløb af kolonne A
    For ræk = 1 To antalRæk
        If Cells(ræk, 1) <> "" Then
            On Error GoTo fejl
           
            filNavn = Cells(ræk, 1) + ".xls"
            Set xls = CreateObject("Excel.application")
            xls.Workbooks.Open xsti + filNavn
            Cells(ræk, 2) = xls.ActiveWorkbook.Sheets(1).Cells(19, 2)
           
            xls.Application.Quit
            Set xls = Nothing
        End If
    Next ræk
   
    MsgBox ("Gennemløb afsluttet")
    Exit Sub
   
fejl:
    Cells(ræk, 2) = "???"
    Resume Next
End Sub
Avatar billede micplus Nybegynder
12. juli 2007 - 08:25 #7
som udgangspunkt, fint - så kommer det store problem :)

Det er ikke kun B kolonnen der skal fodres med tal, fra de eksterne ark - det gælder ydrligere 12 celler.
Avatar billede supertekst Ekspert
12. juli 2007 - 09:04 #8
Hvilke celler?
Avatar billede micplus Nybegynder
12. juli 2007 - 12:24 #9
indtil kolonne L - skal hente fra forskellige celler på sheet2(dog altid det samme sheet)
Avatar billede supertekst Ekspert
12. juli 2007 - 23:30 #10
Det må du forklare mere præcist - hvilke celler skal hentes fra ark2 og hvor skal de indsættes?
Avatar billede micplus Nybegynder
13. juli 2007 - 07:45 #11
Ok, jeg skal prøve at gøre det bedre :)

Det er altid kolonne A, der bestemmer filnavnet på "ark2", dvs. hvorfra data hentes. Lad os tage eksemplet, at A1 = "sovs", dvs. der skal hentes data fra sovs.xls, sheet1.

I B1 skal der stå værdien af sovs.xls!sheet1!B39
I C1 skal der stå værdien af sovs.xls!sheet1!A21
...osv.

Det er altid fra de samme celler i "ark2" at værdierne hentes.
Avatar billede supertekst Ekspert
13. juli 2007 - 08:13 #12
Version 2:

Dim xsti, antalRæk, xls, filNavn
Sub hentFraFiler()
Rem Hent aktuelle sti
    xsti = ActiveWorkbook.Path
    If Right(xsti, 1) <> "\" Then
        xsti = xsti + "\"
    End If
   
Rem find antal rækker
    antalRæk = ActiveCell.SpecialCells(xlLastCell).Row
   
Rem Gennemløb af kolonne A
    For ræk = 1 To antalRæk
        If Cells(ræk, 1) <> "" Then
            On Error GoTo fejl
           
            filNavn = Cells(ræk, 1) + ".xls"
            Set xls = CreateObject("Excel.application")
            xls.Workbooks.Open xsti + filNavn
            Cells(ræk, 2) = xls.ActiveWorkbook.Sheets(1).Cells(39, 2)  'B-ræk <- B39
            Cells(ræk, 3) = xls.ActiveWorkbook.Sheets(1).Cells(21, 1)  'C-ræk <- A21
Rem o.v.s. - insæt selv eftersamme princip
           
            xls.Application.Quit
            Set xls = Nothing
        End If
    Next ræk
   
    MsgBox ("Gennemløb afsluttet")
    Exit Sub
   
fejl:
    Cells(ræk, 2) = "???"
    Resume Next
End Sub
Avatar billede micplus Nybegynder
13. juli 2007 - 09:54 #13
Kan jeg ikke ændre dette :
Cells(ræk, 2) = xls.ActiveWorkbook.Sheets(1).Cells(39, 2)
til

Cells(ræk, 2) = xls.ActiveWorkbook.Sheets("kalkulation").Cells(39, 2)
da sheet'et hedder "kalkulation" - eller er jeg gal på den ;)
Avatar billede supertekst Ekspert
13. juli 2007 - 13:36 #14
Det skulle være OK - er du ellers ved at være tilfreds?
Avatar billede micplus Nybegynder
13. juli 2007 - 14:17 #15
ja tak, det virker fint. Smider du et svar, så vi kan afslutte den?
Avatar billede supertekst Ekspert
13. juli 2007 - 15:28 #16
Godt - så får du 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



IT-JOB

Udviklings- og Forenklingsstyrelsen

Kontorchef til Integrationsplatforme

Udviklings- og Forenklingsstyrelsen

Rådgivende informationsarkitekter med strategisk fokus

Metroselskabet og Hovedstadens Letbane

Cyber Security Konsulent

Saab Danmark A/S

Senior Software Developer