Avatar billede h_s Forsker
04. maj 2009 - 16:00 Der er 13 kommentarer og
1 løsning

Åbne filer

Jeg skal bruge en makro, der åbner alle filer i en mappe ../resultater/..

i hver projekt i mappen Resultater er der en fane der hedder "1", den skal omdøbes til filnavnet, kopieres til filen, som makroen køres fra.
Når de er kopieret, kan alle filerne i Resultat-mappen lukkes - UDEN de gemmes.
Kan det lade sig gøre?
Avatar billede kabbak Professor
05. maj 2009 - 13:42 #1
Public Sub HentArk()
    Dim Fil As String, Sti As String
    Sti = "\resultater" ' Ret til din sti
    Application.ScreenUpdating = False
    Fil = Dir(Sti & "\*.xls")
    Do While Fil <> ""
        Workbooks.Open Filename:= _
                      Sti & "\" & Fil
        Sheets("1").Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
        Sheets("1").Name = Fil
        Windows(Fil).Close
        Fil = Dir
    Loop
    Application.ScreenUpdating = True
End Sub
Avatar billede kabbak Professor
05. maj 2009 - 13:46 #2
hvis du ikke vil have .xls med i fanenavnet så ret

  Sheets("1").Name = Fil
til
  Sheets("1").Name = Split(Fil, ".")(0)
Avatar billede kabbak Professor
05. maj 2009 - 13:54 #3
skulle være et svar ;-))
Avatar billede h_s Forsker
05. maj 2009 - 14:56 #4
Jeg tror jeg løber ind i problemer: Der er et ark, der i forvejen hedder 1. Kan vi omdøbe det inden de kopieres?
Avatar billede h_s Forsker
05. maj 2009 - 14:57 #5
Altså kan vi omdøbe dem vi kopier inden de kopieres? Den der hedder 1 i den projektmappe, hvor makroen køres fra skal bibeholde sit navn 1
Avatar billede kabbak Professor
05. maj 2009 - 15:10 #6
Public Sub HentArk()
    Dim Fil As String, Sti As String
    Sti = "\data" ' Ret til din sti
    Application.ScreenUpdating = False
    Fil = Dir(Sti & "\*.xls")
    Do While Fil <> ""
        Workbooks.Open Filename:= _
                      Sti & "\" & Fil
                        Sheets("1").Name = Split(Fil, ".")(0)
        Sheets(Split(Fil, ".")(0)).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
     
        Windows(Fil).Close False
        Fil = Dir
    Loop
    Application.ScreenUpdating = True
End Sub
Avatar billede h_s Forsker
05. maj 2009 - 17:47 #7
Fantastisk Kabbak :-)
Nu er nu er spørgsmålet så om jeg kan få dig til at gøre en enkelt ting mere:
Nu har jeg alle arkene inde i min nye projektmappe.
De er alle ens, men hedder noget forskelligt.
Kan jeg få kolonnen D i alle de ark, der er kopieret ind langt sammen i fanen Status i kolonne D startene med række 2 til række 19000?
Hvis du kan det, kan du få de point jeg har i spørgsmålhttp://www.eksperten.dk/spm/873169

pft!
Avatar billede kabbak Professor
06. maj 2009 - 22:27 #8
Det kan du da gøre med en formel

=SUM(FørsteIndlæsteArk:SidsteIndlæsteArk!D2)

Træk den nedad til række 19000
Avatar billede h_s Forsker
07. maj 2009 - 08:25 #9
Det er jeg godt klar over, men dem der skal bruge arket, er ikke vandt til at bruge regneark, så derfor vil jeg gerne have så meget automatiseret som muligt.

Men som du skriver, så kan din løsning godt bruges!

Er det svært at lave?
Avatar billede kabbak Professor
07. maj 2009 - 11:31 #10
er det samtidig med at de ark der importeres, at udregningen skal laves ? og kun denne ene gang
Avatar billede kabbak Professor
07. maj 2009 - 11:43 #11
Nu beregner den mens den indlæser

Public Sub HentArk()
    Dim Fil As String, Sti As String, Total(19000), I As Integer
    Sti = "\data" ' Ret til din sti
    Application.ScreenUpdating = False
    Fil = Dir(Sti & "\*.xls")
    Do While Fil <> ""
        Workbooks.Open Filename:= _
                      Sti & "\" & Fil
                        Sheets("1").Name = Split(Fil, ".")(0)
        Sheets(Split(Fil, ".")(0)).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
       
    For I = 0 To 19000
    Total(I) = Total(I) + Cells(I + 2, "D")
    Next
   
        Windows(Fil).Close False
        Fil = Dir
    Loop
    Sheets("Status").Range("D2:D19001") = WorksheetFunction.Transpose(Total)
    Application.ScreenUpdating = True
End Sub
Avatar billede h_s Forsker
07. maj 2009 - 13:38 #12
Har jeg ret i at det eneste du har tilføjet er:

Sheets("Status").Range("D2:D19001") = WorksheetFunction.Transpose(Total)

i 3. sidste linje?

Den virker ikke - Den skriver et 0 i alle celler i kolonne D fra D2:D190001
Avatar billede kabbak Professor
07. maj 2009 - 19:05 #13
også tilføjet

  For I = 0 To 19000
    Total(I) = Total(I) + Cells(I + 2, "D")
    Next
Avatar billede h_s Forsker
08. maj 2009 - 08:00 #14
Ja, og så var der lige Total(19000), I As Integer øverst :-)

Tak for hjælpen.
Smid et svar i http://www.eksperten.dk/spm/873169

Håber også vi (du) finder en løsning i http://www.eksperten.dk/spm/874133

Tak!
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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