Avatar billede imperten Nybegynder
25. september 2003 - 18:16 Der er 13 kommentarer og
1 løsning

Alle filer i en mappe

For en del over siden lavede jeg en makro, som kunne gennemgå alle filer i en mappe, ved at lukke dem op en efter en. Jeg kan bare ikke lige huske hvordan!

Men det skal vist være et eller andet med, at man får en liste over filnavne i mappen, i et array, inden man begynder med Open kommandoen.

Så kan man vel nemt læse fra en Excel-fil til en anden hvor makroen er, ikk?
Avatar billede kabbak Professor
25. september 2003 - 19:01 #1
Dim strFilNavn(300), Nr As Integer
mypath = "C:\data\" ' ret til din sti
If Right(mypath, 1) <> "\" Then mypath = mypath & "\"
Nr = 1
strFilNavn(Nr) = Dir(mypath & "*.xls")  ' Hent den første filnavn.
Do While strFilNavn(Nr) <> ""  ' Start løkken
  If strFilNavn(Nr) <> "." And strFilNavn(Nr) <> ".." Then
  Nr = Nr + 1
End If
strFilNavn(Nr) = Dir    ' Hent næste filnavn.
Loop
Avatar billede imperten Nybegynder
25. september 2003 - 22:07 #2
Det virker fint kabbak. Men jeg har lige udvidet din kode med dette, og så opstår der en 'Subscript out of range' fejl:

Sub forsøg()

Dim strFilNavn(300), Nr As Integer
mypath = "C:\dokumenter\" ' ret til din sti
If Right(mypath, 1) <> "\" Then mypath = mypath & "\"
Nr = 1
strFilNavn(Nr) = Dir(mypath & "*.xls")  ' Hent den første filnavn.
  Cells(1, Nr) = strFilNavn(Nr)
Do While strFilNavn(Nr) <> ""  ' Start løkken
  If strFilNavn(Nr) <> "." And strFilNavn(Nr) <> ".." Then
    Nr = Nr + 1
  End If
  strFilNavn(Nr) = Dir    ' Hent næste filnavn.
  Cells(Nr, 1) = strFilNavn(Nr)
  Cells(Nr, 4) = Workbooks(strFilNavn(Nr)).Worksheets("Ark1").Range("A1")
 
Loop

End Sub

Hvad er der galt? Det er ikke fordi, at Ark1 ikke findes i filerne!
Avatar billede kabbak Professor
25. september 2003 - 22:21 #3
hvad vil du med denne linie.

Cells(Nr, 4) = Workbooks(strFilNavn(Nr)).Worksheets("Ark1").Range("A1")
Avatar billede kabbak Professor
25. september 2003 - 22:35 #4
Sub forsøg()
Dim strFilNavn(300), Nr As Integer
mypath = "C:\dokumenter\" ' ret til din sti
If Right(mypath, 1) <> "\" Then mypath = mypath & "\"
Nr = 1
strFilNavn(Nr) = Dir(mypath & "*.xls")  ' Hent den første filnavn.
  Cells(1, Nr) = strFilNavn(Nr)
Do While strFilNavn(Nr) <> ""  ' Start løkken
  If strFilNavn(Nr) <> "." And strFilNavn(Nr) <> ".." Then
  Cells(Nr, 1) = strFilNavn(Nr)
  'Cells(Nr, 4) = Workbooks(strFilNavn(Nr)).Worksheets("Ark1").Range("A1")
    Nr = Nr + 1
  End If
  strFilNavn(Nr) = Dir    ' Hent næste filnavn.
Loop
End Sub

har rykket dine 2 linier op, de skal stå før,
  Nr = Nr + 1
Avatar billede imperten Nybegynder
26. september 2003 - 07:40 #5
Jeg ville blot teste det af, inden jeg går i gang med det, som jeg i virkeligheden påtænker at lave.

Jeg undgår ikke fejlen ved at flytte linjen op i IF strukturen. Gør du?
Avatar billede kabbak Professor
26. september 2003 - 08:10 #6
jeg får fejl i denne linie, men jeg kan ikke se hvad du vil have den til at gøre.

Cells(Nr, 4) = Workbooks(strFilNavn(Nr)).Worksheets("Ark1").Range("A1")

En anden ting er at hvis der er mere end 300 filer i dit bibliotek skal denne linie ændres.
Dim strFilNavn(300), Nr As Integer
Avatar billede kabbak Professor
26. september 2003 - 08:20 #7
er det dette du vil, vise både sti og mappe.

  Cells(Nr, 4) = mypath & strFilNavn(Nr)
Avatar billede kabbak Professor
26. september 2003 - 08:31 #8
Sub forsøg()
Dim strFilNavn(300), Nr As Integer
mypath = "C:\Documents and Settings\hba\Data\Div excel" ' ret til din sti
If Right(mypath, 1) <> "\" Then mypath = mypath & "\"
Nr = 1
strFilNavn(Nr) = Dir(mypath & "*.xls")  ' Hent den første filnavn.
Do While strFilNavn(Nr) <> ""  ' Start løkken
  If strFilNavn(Nr) <> "." And strFilNavn(Nr) <> ".." Then
  Cells(Nr, 1) = strFilNavn(Nr)
Cells(Nr, 4).Select
  ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
        mypath & strFilNavn(Nr)
      ' skriver hyperlink på alle mapper I D kolonnen
      Nr = Nr + 1
  End If
  strFilNavn(Nr) = Dir    ' Hent næste filnavn.
Loop
End Sub

ny udgave med hyperlink i D kolonne
Avatar billede martin_moth Mester
26. september 2003 - 10:11 #9
He he - "IMperten" - du må være ingeniør ;o)
Avatar billede imperten Nybegynder
26. september 2003 - 18:02 #10
Jeg er ikke ingeniør! Eksport er salg af varer til udlandet, import er modtagelse af varer fra udlandet. En ekspert er en person, der giver viden fra sig. En impert er en person, som tager viden til sig.

Nu virker det kabbak; men den skriver jo blot stien i kolonne 4. Jeg ønsker, at få indholdet i celle A1 i de forskellige regneark vist. Meningen er, at jeg på længere sigt skal konstruere en makro, som kan gå ind og læse en mængde oplysninger i andre regneark, placeret i diverse undermapper.
Avatar billede martin_moth Mester
26. september 2003 - 20:17 #11
Ok - troede det var et humoristisk selvopfundet ord - har aldrig hørt det før :o)
Avatar billede kabbak Professor
26. september 2003 - 20:37 #12
Her henter den værdien fra Ark1 A1 ind i D kolonnen.

det er som formel så den ændres hvis der sker ændringer i mappen.

Sub forsøg()
Dim strFilNavn(300), Nr As Integer
mypath = "C:\dokumenter\" ' ret til din sti
If Right(mypath, 1) <> "\" Then mypath = mypath & "\"
Nr = 1
strFilNavn(Nr) = Dir(mypath & "*.xls")  ' Hent den første filnavn.
Do While strFilNavn(Nr) <> ""  ' Start løkken
  If strFilNavn(Nr) <> "." And strFilNavn(Nr) <> ".." Then
  Cells(Nr, 1) = mypath & strFilNavn(Nr)
Cells(Nr, 4).Select
  ActiveCell.Formula = "='" & mypath & "[" & strFilNavn(Nr) & "]Ark1'!R1C1"
  Nr = Nr + 1
  End If
  strFilNavn(Nr) = Dir    ' Hent næste filnavn.
Loop

End Sub
Avatar billede kabbak Professor
26. september 2003 - 21:22 #13
denne skriver værdien, så ingen kæder.

Sub forsøg()
Dim strFilNavn(300), Nr As Integer, A as Variant
Application.ScreenUpdating = False
mypath = "E:\Dokumenter\Excel\" ' ret til din sti
If Right(mypath, 1) <> "\" Then mypath = mypath & "\"
Nr = 1
strFilNavn(Nr) = Dir(mypath & "*.xls")  ' Hent den første filnavn.
Do While strFilNavn(Nr) <> ""  ' Start løkken
  If strFilNavn(Nr) <> "." And strFilNavn(Nr) <> ".." Then
  Cells(Nr, 1) = strFilNavn(Nr)
  Workbooks.Open Filename:=mypath & strFilNavn(Nr)
  Sheets("Ark1").Select ' ADVARSEL du får fejl hvis arket ikke eksisterer
  A = Range("A1").Value
  Windows(strFilNavn(Nr)).Activate
    ActiveWindow.Close
      Windows("data.xls").Activate' mappen med koden i
      Cells(Nr, 4) = A
  Nr = Nr + 1
  End If
  strFilNavn(Nr) = Dir    ' Hent næste filnavn.
Loop
Application.ScreenUpdating = True
End Sub
Avatar billede imperten Nybegynder
26. september 2003 - 22:28 #14
Så var den der. Så må du hellere få dine velfortjente points!
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
Kurser inden for grundlæggende programmering

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