04. maj 2006 - 15:18Der er
6 kommentarer og 1 løsning
Merge flere excel filer i et dokument
Hej Eksperter! Jeg har følgende script til at samle flere excel dokumenter i ét. Mit spørgsmål er følgende, kan dette ændres til ikke at gemme dataene i et enkelt dataark i stedet for at oprette et nyt for hver fil?
Jeg regner med at det er denne del der skal rettes i While x <= UBound(FilesToOpen) Workbooks.Open FileName:=FilesToOpen(x) Sheets().Move After:=ThisWorkbook.Sheets _ (ThisWorkbook.Sheets.Count) x = x + 1 Wend
Hele scriptet ser ud som følger. ---------------------------------------------------
Sub CombineWorkbooks() Dim FilesToOpen Dim x As Integer
On Error GoTo ErrHandler Application.ScreenUpdating = False
If TypeName(FilesToOpen) = "Boolean" Then MsgBox "No Files were selected" GoTo ExitHandler End If
x = 1 While x <= UBound(FilesToOpen) Workbooks.Open FileName:=FilesToOpen(x) Sheets().Move After:=ThisWorkbook.Sheets _ (ThisWorkbook.Sheets.Count) x = x + 1 Wend
ExitHandler: Application.ScreenUpdating = True Exit Sub
ErrHandler: MsgBox Err.Description Resume ExitHandler End Sub
Sub Example1_More_Sheets() Dim basebook As Workbook Dim mybook As Workbook Dim sourceRange As Range Dim destrange As Range Dim rnum As Long Dim SourceRcount As Long Dim FNames As String Dim MyPath As String Dim SaveDriveDir As String Dim sh As Worksheet
FNames = Dir("*.xls") If Len(FNames) = 0 Then MsgBox "No files in the Directory" ChDrive SaveDriveDir ChDir SaveDriveDir Exit Sub End If
Application.ScreenUpdating = False Set basebook = ThisWorkbook basebook.Worksheets(1).Cells.Clear 'clear all cells on the first sheet rnum = 1
Do While FNames <> "" Set mybook = Workbooks.Open(FNames) For Each sh In mybook.Worksheets Set sourceRange = sh.Range("A1:P40") SourceRcount = sourceRange.Rows.Count Set destrange = basebook.Worksheets(1).Cells(rnum, "A")
Rangen giver lidt problemer. Har svært ved at definere hvor langt ned i dokumentet den skal gå. Svaret er til der ikke er flere data at indlæse...
Set sourceRange = sh.Range("A1:P40")
I enkelte tilfælde er dokumentet til indlæsning tomt. jeg må kigge videre på det ved lejlighed. Hvis der er nogen der ved hvordan man udvider ragen til at være en dynamisk værdi lig antallet af rækker med data i et givent dokument?
------------------------------ Sub Example1_More_Sheets() Dim basebook As Workbook Dim mybook As Workbook Dim sourceRange As Range Dim destrange As Range Dim rnum As Long Dim SourceRcount As Long Dim FNames As String Dim MyPath As String Dim SaveDriveDir As String Dim sh As Worksheet
FNames = Dir("*.xls") If Len(FNames) = 0 Then MsgBox "No files in the Directory" ChDrive SaveDriveDir ChDir SaveDriveDir Exit Sub End If
Application.ScreenUpdating = False Set basebook = ThisWorkbook basebook.Worksheets(1).Cells.Clear 'clear all cells on the first sheet rnum = 1
Do While FNames <> "" Set mybook = Workbooks.Open(FNames) For Each sh In mybook.Worksheets Set sourceRange = sh.UsedRange SourceRcount = sourceRange.Rows.Count Set destrange = basebook.Worksheets(1).Cells(rnum, "A")
ChDrive SaveDriveDir ChDir SaveDriveDir Application.ScreenUpdating = True End Sub
------
Smid et svar, så du kan få point. Jeg vil forsøge at udvide med en 'gennemse'/'browse' option, så man nemt kan angive hvilken mappe der skal anvendes. Smider scriptet her, så snart jeg har noget der virker. Tusind tak.
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.