Avatar billede henriksp Nybegynder
29. maj 2006 - 17:13 Der er 5 kommentarer og
1 løsning

Hente data fra flere celler i fler-arkede workbooks i mappe

Med hjaelp fra bl.a. Bak lavede jeg for nogle aar siden nedenstaaende makro der henter data i lukkede workbooks i en mappe. (Tak for det Bak)

Makroen skifter raekke for hver gang jeg har et nyt ark i en workbook. Problemet er at jeg gerne vil have alle data paa een reakke fra en workbook og foerst skifte en raekke ned naar det er en ny workbook.

Et andet problem er at jeg vil hente forskellige celler i de forskellige ark (jeg kender navnene paa arkene, ikke altid paa workbooks).

Alt i alt jeg vil have alle data jeg oensker fra een woorkbook ud paa en raekke, efterfulgt af data jeg oensker fra den naeste woorkbook ud paa en foelgede raekke o.s.v. (Det er de samme celler jeg oensker fra alle workbooks, men ikke de samme celler i hvert ark) 

Kan I hjaelpe mig med det, funktion med link til hvert filnavn i foreste kolonne maa meget gerne bevares.

Mange tak.

Sub GetValuesFromClosedFiles()
Dim FS As FileSearch
Dim FilePath As String
Dim i As Integer, j As Integer
Dim v As Variant
Dim Cells2Get()
Dim sheet As String
Const Filespec = "*.xls"              'udfyldes af bruger Filtype
             
FilePath = "C:\test\" 'udfyldes af bruger Startfolder
Cells2Get = Array("B2", "B3")  'udfyldes af bruger Celler, der skal hentes DER KAN Skrives flere celler efterfulgt af komma
Application.ScreenUpdating = False
Set FS = Application.FileSearch
With FS
  .LookIn = FilePath
  .Filename = Filespec
  '.SearchSubFolders = True          'skal underfoldere også søges
  .Execute
  If .FoundFiles.Count = 0 Then
      MsgBox ("Ingen filer fundet")
      Exit Sub
  End If

  For i = 1 To .FoundFiles.Count
    i5 = i * 5 - 4
    v = Split(.FoundFiles(i), Application.PathSeparator)
    FilePath = Left(.FoundFiles(i), InStrRev(.FoundFiles(i), Application.PathSeparator))
    ActiveCell.Offset(i5 - 1, 0) = FilePath & v(UBound(v))
    sheet = "part0"
    For j = 0 To UBound(Cells2Get)
    ActiveCell.Offset(i5 - 1, j + 1) = _
                  GetValue(FilePath, v(UBound(v)), sheet, Cells2Get(j))
    Next
 
    ActiveCell.Offset(i5 + 1 - 1, 0) = FilePath & v(UBound(v))
    sheet = "parti"
    For j = 0 To UBound(Cells2Get)
    ActiveCell.Offset(i5 + 1 - 1, j + 1) = _
                  GetValue(FilePath, v(UBound(v)), sheet, Cells2Get(j))
    Next
    ActiveCell.Offset(i5 + 2 - 1, 0) = FilePath & v(UBound(v))
    sheet = "partii"
    For j = 0 To UBound(Cells2Get)
    ActiveCell.Offset(i5 + 2 - 1, j + 1) = _
                  GetValue(FilePath, v(UBound(v)), sheet, Cells2Get(j))
    Next
    ActiveCell.Offset(i5 + 3 - 1, 0) = FilePath & v(UBound(v))
    sheet = "partiii"
    For j = 0 To UBound(Cells2Get)
    ActiveCell.Offset(i5 + 3 - 1, j + 1) = _
                  GetValue(FilePath, v(UBound(v)), sheet, Cells2Get(j))
    Next
    ActiveCell.Offset(i5 + 4 - 1, 0) = FilePath & v(UBound(v))
    sheet = "partiv"
    For j = 0 To UBound(Cells2Get)
    ActiveCell.Offset(i5 + 4 - 1, j + 1) = _
                  GetValue(FilePath, v(UBound(v)), sheet, Cells2Get(j))
    Next
  Next
End With
Application.ScreenUpdating = False
End Sub
Avatar billede oyejo Nybegynder
04. juni 2006 - 17:55 #1
'Du har en function GetValue som jeg ikke kjenner,
'så jeg får ikke testet, men prøv denne

Sub GetValuesFromClosedFiles()
  Dim FS As FileSearch
  Dim FilePath As String
  Dim i As Integer, j As Integer, n As Integer, c As Integer
  Dim v As Variant
  Dim Cells2Get()
  Dim sheetNameEnd()
  Dim sheet As String
 
 
  Const Filespec = "*.xls"  'udfyldes af bruger Filtype
  'udfyldes af bruger Startfolder
  FilePath = "C:\test\"
  sheetNameEnd() = Array("0", "i", "ii", "iii", "iv")
 
  'udfyldes af bruger Celler, der skal hentes,
  'NB! EN LINJE(ARRAY) FOR HVERT ARK
  Cells2Get = Array(Array("B10", "C10"), _
                    Array("B11", "C11", "D11"), _
                    Array("B12", "C12"), _
                    Array("B13", "C13"), _
                    Array("B14", "C14"))
 
  Application.ScreenUpdating = False
 
  Set FS = Application.FileSearch
  With FS
    .LookIn = FilePath
    .Filename = Filespec
    .Execute
    If .FoundFiles.Count = 0 Then
      MsgBox ("Ingen filer fundet")
      Exit Sub
    End If
   
    For i = 1 To .FoundFiles.Count
      c = 0
      v = Split(.FoundFiles(i), Application.PathSeparator)
      ActiveCell.Offset(i, 0) = v(UBound(v))
     
      For n = 0 To UBound(sheetNameEnd)
        sheet = "part" & sheetNameEnd(n)
        For j = 0 To UBound(Cells2Get(n), 1)
          c = c + 1
          ActiveCell.Offset(i, c) = GetValue(FilePath, v(UBound(v)), sheet, Cells2Get(n)(j))
        Next
      Next
    Next
  End With
 
  Application.ScreenUpdating = False
 
End Sub
Avatar billede henriksp Nybegynder
08. juni 2006 - 10:57 #2
Undskyld jeg glemte funktionen:
Private Function GetValue(path, file, sheet, range_ref)
Dim arg As String
arg = "'" & path & "[" & file & "]" & sheet & "'!" & Range(range_ref).Range("A1").Address(, , xlR1C1)
GetValue = ExecuteExcel4Macro(arg)
End Function

Men det virker fint saadan som du har beskrevet, dog er der ikke link til filen men blot navnet paa filen
Avatar billede oyejo Nybegynder
08. juni 2006 - 15:16 #3
hva skjer om du tar bort disse to linjer :
     
      v = Split(.FoundFiles(i), Application.PathSeparator)
      ActiveCell.Offset(i, 0) = v(UBound(v))

og erstatter dem med:   

      v = Split(.FoundFiles(i), Application.PathSeparator)
      FilePath = Left(.FoundFiles(i), InStrRev(.FoundFiles(i), _
                                      Application.PathSeparator))
      ActiveCell.Offset(i, 0) = FilePath & v(UBound(v))
Avatar billede henriksp Nybegynder
08. juni 2006 - 19:29 #4
OK, Det virker fint, tak skal du have.
Avatar billede henriksp Nybegynder
22. juni 2006 - 11:16 #5
Hej Oyejo,

Jeg har lige fundet et problem, hvis cellevaerdien er blank i mine ark, saa returneres der et nul, er det muligt at lave macroen om saa der returneres en blank eller alternativt "N/A" for Not available.
Avatar billede henriksp Nybegynder
22. juni 2006 - 11:37 #6
Der er 30 point, hvis du kan svare:
http://www.eksperten.dk/spm/716929
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