04. november 2002 - 15:19Der er
14 kommentarer og 2 løsninger
Åbne flere regneark
Jeg har i en bestemt mappe 20 forskellige regneark liggende. Jeg vil så stå i et regneark som ikke ligger i samme mappe(udgangspunktet) og så vil jeg hente celle A1+ celle A2 i alle de regneark som ligger i denne mappe. I regenarkt som er udgangspunktet skal de så listes nedad. Så mit egentlige problem er at få lavet en lykke der fortætter med at tage det næste regneark i mappen indtil der ikke er flere. Findes en sådan løkke i VBA for Excel
Her er også en. Den åbner dog ikke filerne, men henter bare værdierneSub BatchProcess() Dim FS As FileSearch Dim FilePath As String, FileSpec As String Dim i As Integer Dim v As Variant Dim sheet As String, cell_1 As String, cell_2 As String FilePath = "C:\dokumenter\" FileSpec = "*.xls" sheet = "Ark1" cell_1 = "$A$1" cell_2 = "$A$2" Set FS = Application.FileSearch With FS .LookIn = FilePath .Filename = FileSpec .Execute If .FoundFiles.Count = 0 Then MsgBox ("Ingen filer fundet") Exit Sub End If End With For i = 1 To FS.FoundFiles.Count v = Split(FS.FoundFiles(i), Application.PathSeparator) ActiveCell.Offset(i - 1, 0) = hentceller(FilePath, v(UBound(v)), sheet, cell_1) ActiveCell.Offset(i - 1, 1) = hentceller(FilePath, v(UBound(v)), sheet, cell_2) Next Range(ActiveCell, ActiveCell.Offset(i, 1)) = Range(ActiveCell, ActiveCell.Offset(i, 1)).Value End Sub
Function hentceller(p, f, s, c) hentceller = "='" & p & "[" & f & "]" & s & "'!" & Range(c).Address(, , xlA1) End Function
Så har jeg prøvet mig frem med begge to. FlemmingDahl din kommer ikke videre fra denne linie Do While Not (sFileToOpen = ""). Bak, din virker perfekt, jeg kunne bare godt tænke mig at den kun henter værdien og ikke laver en kæde. Jeg har selv prøvet men kan ikke lige få det til at hænge sammen. Kan du hjælpe?
Linien Range(ActiveCell, ActiveCell.Offset(i, 1)) = Range(ActiveCell, ActiveCell.Offset(i, 1)).Value skulle gerne gøre at at kæderne forsvinder igen, idet den kopier cellerne og derefter kun indsætter værdierne. Der findes dog en anden metode, men den har jeg ikke rigtig fået til at virke endnu...
Okey, så lykkedes det alligevel. Denne henter fra lukkede filer uden kæderne
Skift funktionen hentceller ud med denne her og slet linien Range(ActiveCell, ActiveCell.Offset(i, 1)) = Range(ActiveCell, ActiveCell.Offset(i, 1)).Value
Private Function hentceller(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
Sub GetValuesFromClosedFiles() Dim FS As FileSearch Dim FilePath As String Dim i As Integer, j As Integer Dim v As Variant Dim Cells2Get() Const Filespec = "*.xls" 'udfyldes af bruger Filtype Const sheet = "Sheet1" 'udfyldes af bruger Arknavn
FilePath = "C:\test\" 'udfyldes af bruger Startfolder Cells2Get = Array("A1", "B1", "C1") 'udfyldes af bruger Celler, der skal hentes 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 v = Split(.FoundFiles(i), Application.PathSeparator) FilePath = Left(.FoundFiles(i), InStrRev(.FoundFiles(i), Application.PathSeparator)) ActiveCell.Offset(i - 1, 0) = FilePath & v(UBound(v)) For j = 0 To UBound(Cells2Get) ActiveCell.Offset(i - 1, j + 1) = _ GetValue(FilePath, v(UBound(v)), sheet, Cells2Get(j)) Next Next End With Application.ScreenUpdating = False End Sub
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
Jeg har delt pointene imellem jer, for jeg har brugt lidt fra hver og sat det sammen til en løsning, som jeg umiddelbart er tilfreds med. Tak for hjælpen
>>Flemmingdahl, Det er lige det jeg står og mangler. Bortset fra at jeg gerne vil hente en range, f.exs a5:k5, og at det ark jeg vil hente fra hedder noget med mellemrum. (har forsøgt - men kunne ikke få det til at virke).
Hvis du er interesseret i at hjælpe kan jeg oprette et nyt spørgsmål.
mvh Peter
Synes godt om
Ny brugerNybegynder
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.