Excel VBA - importeren

excel_vba_dynamisch_importeren

De onderstaande procedure zoekt naar bron-werkmappen (xlsx) om deze te openen en te importeren naar de doel-werkmap.

De locatie waarin gezocht wordt is relatief ten opzichte van de locatie van de doel-werkmap.

De enige voorwaarde voor het goed functioneren van deze procedure is dat zowel de bron- als de doelwerkmap dezelfde indeling hebben qua kolommen. Voor de rest is deze functionaliteit geheel dynamisch en dus niet gebonden aan een vooraf vast gesteld aantal kolommen of rijen.

01'-----------------------------------------------------------------------------------------------------------------------
02' Auteur        : pascalterheege.nl
03' Datum         : 6-1-2016
04' Object        : modImporteer
05' Doel          : xlsx-bestanden uit \bron\ importeren naar huidig werkboek
06' Verwijzing    : Microsft Scripting Runtime
07' Bron          :
08'-----------------------------------------------------------------------------------------------------------------------
09Option Explicit
10 
11Sub importeerBestanden()
12 
13'   Variabelen declareren
14    Dim fso As New FileSystemObject     'FSO
15    Dim fld As Folder
16    Dim f As File
17     
18    Dim strLocatie As String            'Locatie
19     
20    Dim wbDoel As Workbook              'Doel
21    Dim rngDoel As Range
22     
23    Dim wbBron As Workbook              'Bron
24    Dim rngBron As Range
25     
26'   Variabelen initialiseren
27    Set wbDoel = ActiveWorkbook                             'Doel
28    strLocatie = wbDoel.Path & Application.PathSeparator _
29    & "Bron" & Application.PathSeparator                    'Relatieve padverwijzing t.o.v. doel.xlsm
30     
31    Set fld = fso.GetFolder(strLocatie)
32      
33'   Schermactiviteit uitschakelen t.b.v performance
34    Application.ScreenUpdating = False
35     
36'   Itereren door gevonden bestanden in locatie
37    For Each f In fld.Files
38     
39'       Alleen xlsx bestanden!
40        If fso.GetExtensionName(f) = "xlsx" Then
41     
42'           Dynamische bron range (exclusief header)
43            Set wbBron = Workbooks.Open(f)                                  'bronbestand openen
44            Set rngBron = wbBron.Sheets(1).Range("A1").CurrentRegion        'bronrange is huidig bereik (currentregion) t.o.v. A1
45            Set rngBron = rngBron.Offset(1).Resize(rngBron.Rows.Count _
46            - 1, rngBron.Columns.Count)                                     'bronrange exlusief header!
47             
48'           Dynamische doel range (laatste regel + 1)
49            Set rngDoel = wbDoel.Sheets(1).Range("A" & wbDoel.Sheets(1) _
50            .Range("A" & Rows.Count).End(xlUp).Row + 1)
51             
52'           Bron kopieren naar doel
53            rngBron.Copy Destination:=rngDoel
54             
55'           Bron sluiten
56            wbBron.Close
57         
58        End If
59         
60    Next f
61             
62'   Schermactiviteit aanschakelen
63    Application.ScreenUpdating = True
64             
65End Sub

Download hier het oefenbestand.