VBA - import z více sešitů do jednoho Vyřešeno

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

_Stepan
nováček
Příspěvky: 2
Registrován: listopad 14
Pohlaví: Nespecifikováno
Stav:
Offline

VBA - import z více sešitů do jednoho

Příspěvekod _Stepan » 18 lis 2014 21:45

Zdravím,
mám prosbu, potřeboval bych pomoci s úpravou makra - definováním kopírované oblasti a vložení do jiného sešitu "sumáře".
Ve složce je několik zdrojových souborů (Sešit1.xlsx, Sešit2.xlsx, mají stejný formát, obsahují hlavičku). Tyto zdrojové soubory budou postupně plněny, bude se rozšiřovat oblast kopírovaných dat (po řádcích).
V přiloženém makru je vyřešeno postupné načítání souborů ve složce a import prvního řádku, potřeboval bych ho ale rozšířit tak, aby ze zdrojového souboru vybralo oblast od začátku listu (bez hlavičky, tedy sloupce A až J) k poslednímu vyplněnému řádku (stačí kontrola poslední vyplněné buňky v prvním sloupci), to stejné by provedlo s dalším souborem v dané složce, data z dalšího souboru by řadil pod data z předchozího.
Ještě by to mělo před celým importem smazání obsahu cílového listu kromě hlavičky (ale to zvládnu sám:)).

Kód: Vybrat vše

Option Explicit

Sub Import()
Dim MsgResponse, MsgTit As String
Dim ImportFirstFile As Boolean, ImportDir As String, ImportFile As String
Dim ZdrojSoubor As Workbook, ZdrojList As Worksheet
Dim ZdrojOblast As Range, c As Range
Dim CilOblast As Range, i As Integer, j As Integer
  MsgTit = "Import dat"
  ImportFirstFile = True ' identifikace prvniho souboru v adresari
  ImportDir = "h:\Test_WUP\" ' cesta k souborum
 
  Set CilOblast = ActiveWorkbook.Worksheets("list2").Range("a2")
  Application.ScreenUpdating = False
  j = 0 ' ofset radku na cilovem listu
  Do
    If ImportFirstFile Then
      On Error GoTo Err0
      ImportFile = Dir(ImportDir & "\*.xlsm") ' prvni soubor v adresari
      On Error GoTo 0
      If ImportFile = "" Then _
        MsgResponse = MsgBox("Adresáo souboru: '" & ImportDir _
        & "' k importu je prázdný!", _
        vbOKOnly + vbInformation, MsgTit): Exit Do
      ImportFirstFile = False
    Else
      ImportFile = Dir ' dalsi soubory v adresari
    End If
    If ImportFile = "" Then _
      MsgResponse = MsgBox("V adresáoi souboru: '" & ImportDir _
      & "' k importu nejsou další soubory!", _
      vbOKOnly + vbInformation, MsgTit): Exit Do
      '
      MsgBox ImportFile ' pouze pro test
      '
      Set ZdrojSoubor = Workbooks.Open(ImportDir & "\" & ImportFile) ' otevrit soubor
      i = 0 ' ofset sloupcu na cilovem listu
     
      On Error GoTo Err1
      Set ZdrojList = ZdrojSoubor.Worksheets("list1")
      On Error GoTo 0
      Set ZdrojOblast = ZdrojList.Range("A2:J2")
      For Each c In ZdrojOblast.Cells
        CilOblast.Offset(j, i).Value = c.Value
        i = i + 1 ' dalsi sloupec na cilovem listu
     
      Next c
      ZdrojSoubor.Close
      j = j + 1 ' dalsi radek na cilovem listu
  Loop ' dalsi soubor
  Application.ScreenUpdating = True
  Exit Sub
Err0:
  MsgResponse = MsgBox("Chyba v zadání cesty a souboru '" & ImportDir & "\" & ImportFile & "'!" _
  & vbCrLf & "Bih procedury bude ukoneen!", _
  vbOKOnly + vbInformation, MsgTit): Exit Sub
Err1:
  MsgResponse = MsgBox("V souboru " & ImportDir & "\" & ImportFile & " nebyl nalezen list1!" _
  & vbCrLf & "Bih procedury bude ukoneen!", _
  vbOKOnly + vbInformation, MsgTit): Exit Sub
End Sub


Děkuji za pomoc a váš čas

Hezký večer
Přílohy
Sešit2.xlsx
(352.41 KiB) Staženo 42 x
Sešit1.xlsx
(352.37 KiB) Staženo 42 x
Vse.xlsm
(356.14 KiB) Staženo 55 x

Reklama
cmuch
Level 4.5
Level 4.5
Příspěvky: 1544
Registrován: březen 11
Bydliště: Drsná Vysočina :D
Pohlaví: Muž
Stav:
Offline

Re: VBA - import z více sešitů do jednoho

Příspěvekod cmuch » 19 lis 2014 06:44

Trochu jsem ho poupravil

Kód: Vybrat vše

Option Explicit

Sub Import()
Dim MsgResponse, MsgTit As String
Dim ImportFirstFile As Boolean, ImportDir As String, ImportFile As String
Dim ZdrojSoubor As Workbook, ZdrojList As Worksheet
Dim ZdrojOblast As Range, c As Range
Dim CilOblast As Range, i As Integer, j As Long, LastRowZdrojList As Long
  MsgTit = "Import dat"
  ImportFirstFile = True ' identifikace prvniho souboru v adresari
  ImportDir = "h:\Test_WUP\" ' cesta k souborum
 
  Set CilOblast = ActiveWorkbook.Worksheets("list2").Range("A2")
  Application.ScreenUpdating = False
  j = 0 ' ofset radku na cilovem listu
  Do
    If ImportFirstFile Then
      On Error GoTo Err0
      ImportFile = Dir(ImportDir & "\*.xlsx") ' prvni soubor v adresari
      On Error GoTo 0
      If ImportFile = "" Then _
        MsgResponse = MsgBox("Adresáo souboru: '" & ImportDir _
        & "' k importu je prázdný!", _
        vbOKOnly + vbInformation, MsgTit): Exit Do
      ImportFirstFile = False
    Else
      ImportFile = Dir ' dalsi soubory v adresari
    End If
    If ImportFile = "" Then _
      MsgResponse = MsgBox("V adresáoi souboru: '" & ImportDir _
      & "' k importu nejsou další soubory!", _
      vbOKOnly + vbInformation, MsgTit): Exit Do
      '
      MsgBox ImportFile ' pouze pro test
      '
      Set ZdrojSoubor = Workbooks.Open(ImportDir & "\" & ImportFile) ' otevrit soubor
      i = 0 ' ofset sloupcu na cilovem listu
     
      On Error GoTo Err1
      Set ZdrojList = ZdrojSoubor.Worksheets("list1")
      LastRowZdrojList = ZdrojList.Cells(ZdrojList.Rows.Count, 1).End(xlUp).Row
      On Error GoTo 0
      Set ZdrojOblast = ZdrojList.Range("A2:J" & LastRowZdrojList)
      For Each c In ZdrojOblast.Cells
      CilOblast.Offset(j, i).Value = c.Value
        If i < 9 Then
          i = i + 1 ' dalsi sloupec na cilovem listu
        Else
          i = 0
          j = j + 1 ' dalsi radek na cilovem listu
        End If
      Next c
      ZdrojSoubor.Close
      Set ZdrojSoubor = Nothing
  Loop ' dalsi soubor
  Application.ScreenUpdating = True
  Exit Sub
Err0:
  MsgResponse = MsgBox("Chyba v zadání cesty a souboru '" & ImportDir & "\" & ImportFile & "'!" _
  & vbCrLf & "Bih procedury bude ukoneen!", _
  vbOKOnly + vbInformation, MsgTit): Exit Sub
Err1:
  MsgResponse = MsgBox("V souboru " & ImportDir & "\" & ImportFile & " nebyl nalezen list1!" _
  & vbCrLf & "Bih procedury bude ukoneen!", _
  vbOKOnly + vbInformation, MsgTit): Exit Sub
End Sub

_Stepan
nováček
Příspěvky: 2
Registrován: listopad 14
Pohlaví: Nespecifikováno
Stav:
Offline

Re: VBA - import z více sešitů do jednoho  Vyřešeno

Příspěvekod _Stepan » 19 lis 2014 07:24

Dobré ráno,

to je přesně ono.

Děkuji!

Hezký den!


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek

Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti