Excel-VBA import Vyřešeno

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

Moderátor: Mods_senior

Dieesels
Level 1
Level 1
Příspěvky: 91
Registrován: duben 08
Pohlaví: Nespecifikováno
Stav:
Offline

Excel-VBA import  Vyřešeno

Příspěvekod Dieesels » 13 dub 2009 15:45

Dobrý den, jak to upravit (viz.níže), aby se data importovala do aktivního sešitu na určitý list ?

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, ListData As String, ZdrojAdresa As String
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 = "E:\excel" ' cesta k souborum
  ZdrojAdresa = "a1,b2,c3:d4,f5" ' adresy bunek se zdrojovymi daty
  Set CilOblast = ActiveWorkbook.Worksheets("list1").Range("a1")
  Application.ScreenUpdating = False
  j = 0 ' ofset radku na cilovem listu
  Do
    If ImportFirstFile Then
      ImportFile = Dir(ImportDir & "\*.xls") ' prvni soubor v adresari
      If ImportFile = "" Then _
        MsgResponse = MsgBox("Adresáø souborù: '" & 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áøi souborù: '" & ImportDir _
      & "' k importu nejsou další soubory!", _
      vbOKOnly + vbInformation, MsgTit): Exit Do
      '
      MsgBox ImportFile ' pouze pro test
      '
      ListData = "list1" ' algoritmus prirazeni nazvu zdrojoveho listu dle souboru
      '
      Set ZdrojSoubor = Workbooks.Open(ImportDir & "\" & ImportFile) ' otevrit soubor
      Set ZdrojList = ZdrojSoubor.Worksheets(ListData)
      Set ZdrojOblast = ZdrojList.Range(ZdrojAdresa)
      i = 0 ' ofset sloupcu na cilovem listu
      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
End Sub

Reklama
Uživatelský avatar
mike007
Master Level 7.5
Master Level 7.5
Příspěvky: 5860
Registrován: srpen 07
Bydliště: Pardubice
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Excel-VBA import

Příspěvekod mike007 » 13 dub 2009 16:13

Stačí změnit nastavení oblasti :
Set CilOblast = ActiveWorkbook.Worksheets("list1").Range("a1")
Nejlepší hra je Excel!
Pravidla fóra PC-helpJak označit téma za vyřešené
»»»»»»»»»»»»»»»»»»»»»»»
UPOZORNĚNÍ - můj Skype, Soukromé zprávy či email neslouží jako tech. podpora.
Dotazy pište do fóra. Od toho tu je.

Dieesels
Level 1
Level 1
Příspěvky: 91
Registrován: duben 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Excel-VBA import

Příspěvekod Dieesels » 13 dub 2009 18:06

Mohl by jste to upřesnit, nemyslím import do jiného listu, ale stávajícího sešitu. To znamená, toto makro mám např. v sešitu1, po spuštění procedury se importují data ze sešitu2 do právě otevřeného sešitu1 do určitého listu. :?

Dieesels
Level 1
Level 1
Příspěvky: 91
Registrován: duben 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Excel-VBA import

Příspěvekod Dieesels » 13 dub 2009 19:59

Nikoho nic nenapadá?... :?

navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: srpen 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Excel-VBA import

Příspěvekod navstevnik » 13 dub 2009 22:49

Uvedena procedura umistena v modulu aktivniho sesitu slouzi k importu dat do tohoto sesitu na list, jehoz nazev je v procedure - Set CilOblast = ActiveWorkbook.Worksheets("list1").Range("a1")-, z vice sesitu, kde data jsou v techto sesitech na listech se stejnym nazvem a ve stejnych bunkach.
Pozadujes "aby se data importovala do aktivního sešitu na určitý list " a to prave procedura vykonava.
Zkus prosim precizneji formulovat pozadavek.
PS.Koukni se sem, jak importovat data: http://excelplus.net./news.php?readmore=20

Uživatelský avatar
mike007
Master Level 7.5
Master Level 7.5
Příspěvky: 5860
Registrován: srpen 07
Bydliště: Pardubice
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Excel-VBA import

Příspěvekod mike007 » 13 dub 2009 22:50

Data by se ti měly importovat do aktivního sešitu, nejde to snad? Co ti hází za chybu?
Vyzkoušel jsem ho u sebe a nic neobvyklého jsem nezpozoroval.

Ve složce E:\excel by měl/y být umístěn/y soubor/y s daty, které se mají po spuštění makra importovat do sešitu.
Takže když si vytvoříš excelový dokument, nakopíruješ do něj makro a spustíš ho, data ze složky E:\excel se importují do tvého sešitu. Nic dalšího makro neumí.
Nejlepší hra je Excel!
Pravidla fóra PC-helpJak označit téma za vyřešené
»»»»»»»»»»»»»»»»»»»»»»»
UPOZORNĚNÍ - můj Skype, Soukromé zprávy či email neslouží jako tech. podpora.
Dotazy pište do fóra. Od toho tu je.

Dieesels
Level 1
Level 1
Příspěvky: 91
Registrován: duben 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Excel-VBA import

Příspěvekod Dieesels » 14 dub 2009 21:56

Děkuji za pomoc. Už to jde. Problém byl mezi klávesnicí a židlí. Ještě jednou díky za strávený čas nad problémem a trpělivost... :wink:

Dieesels
Level 1
Level 1
Příspěvky: 91
Registrován: duben 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Excel-VBA import

Příspěvekod Dieesels » 15 dub 2009 23:15

Ještě jeden dotaz týkající se importu. V přiloženém souboru je makro, které opět importuje data z databanka.xls, do import.xls sheet2. Vše funguje makro je funkční, jen když změním koncovku, aby se importovala data místo databanka.xls, tak databanka.csv...to znamená jiný formát. Tak to nelze. Jak na to?...Je to poslední dotaz co se týče importu dat.
Přílohy
VBA import.rar
(24.16 KiB) Staženo 95 x

navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: srpen 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Excel-VBA import

Příspěvekod navstevnik » 16 dub 2009 18:53

Pro import souboru *.csv pouzij nasledujici proceduru:

Kód: Vybrat vše

Option Explicit

Sub InputCsvFile(ByVal CestaSoubor As String, ByVal Wsht As Worksheet)
' oddelovac polozek je ";"
  Dim Blok As Range, Cll As Range
  ' nacteni souboru do listu - QueryTables
  With Wsht.QueryTables.Add(Connection:="TEXT;" & CestaSoubor, _
      Destination:=Range("A1"))
    .TextFileCommaDelimiter = False
    .Refresh BackgroundQuery:=False
  End With
  ' nasledujici cast procedury aktivovat, kdyz desetinny oddelovac cisel je "."
  '
  ' definovat blok pro prevod cisel z textoveho tvaru na cislo
'    With Wsht
'      Set Blok = .Range(.Range("c2"), .Range("c2").End(xlDown))
'    End With
'    ' format bunky a prevod
'    For Each Cll In Blok
'      Cll.NumberFormat = "0.00"
'      Cll.Value = CDbl(Val(Cll.Value))
'    Next Cll
End Sub

' testovaci procedura pro volani InputCsvFile
Sub TestInputCsvFile()
  Dim CestaSoubor As String, Wsht As Worksheet
  ' cesta a soubor, lze nacist i z listu, napr: CestaSoubor =Worksheets("list1").Range("A1")
  CestaSoubor = "e:\excel\databanka.csv"
  ' list pro ulozeni dat
  Set Wsht = Worksheets("list2")
  Wsht.Activate
  Wsht.UsedRange.ClearContents
  InputCsvFile CestaSoubor, Wsht
End Sub


Snad to vyresi tve trable s nacitanim souboru *.csv

Dieesels
Level 1
Level 1
Příspěvky: 91
Registrován: duben 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Excel-VBA import

Příspěvekod Dieesels » 16 dub 2009 19:43

Nevím co říct. Konečně mám vše co jsem potřeboval co se týče importu dat .Opět vám za to děkuji.

navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: srpen 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Excel-VBA import

Příspěvekod navstevnik » 16 dub 2009 23:24

Variantni reseni:

Kód: Vybrat vše

Option Explicit

Sub InputCsvFile1(ByVal CestaSoubor As String, TargetCll As Range)
  Dim Str As String, PoleTemp
  Dim i As Long, j As Integer

  Open CestaSoubor For Input As #1
  If Not EOF(1) Then
    i = 0
    Do
      Line Input #1, Str
      PoleTemp = Split(Str, ";")
      j = 0
      Do
        If IsNumeric(PoleTemp(j)) Then
          TargetCll.Offset(i, j).Value = CDbl(Val(PoleTemp(j)))
          TargetCll.Offset(i, j).NumberFormat = "0.00"
        Else
          TargetCll.Offset(i, j).Value = PoleTemp(j)
        End If
        j = j + 1
      Loop While j <= UBound(PoleTemp)
      i = i + 1
    Loop While Not EOF(1)
  End If
  Close #1
End Sub

Sub TestInputCsvFile1()
  Dim CestaSoubor As String, TargetCll As Range
  CestaSoubor = "e:\excel\databanka.csv"
  ' ulozit do:
  Set TargetCll = Worksheets("list3").Range("a1")
  InputCsvFile1 CestaSoubor, TargetCll
End Sub

Dieesels
Level 1
Level 1
Příspěvky: 91
Registrován: duben 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Excel-VBA import

Příspěvekod Dieesels » 18 dub 2009 13:38

Ta druhá varianta byl dobrý nápad. :wink:


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Import PDF do excelu Příloha(y)
    od luko02420 » 13 kvě 2023 11:29 » v Kancelářské balíky
    18
    3710
    od luko02420 Zobrazit poslední příspěvek
    16 kvě 2023 11:27
  • PowerQuery - import dat do sloupců Příloha(y)
    od MK_Vs » 31 říj 2023 10:00 » v Kancelářské balíky
    9
    2166
    od MK_Vs Zobrazit poslední příspěvek
    02 lis 2023 09:26
  • VPS Hosting pro import vlastního VM (proxmox)
    od FIDLIK » 20 říj 2023 21:16 » v Vše ostatní (sw)
    0
    1774
    od FIDLIK Zobrazit poslední příspěvek
    20 říj 2023 21:16
  • Excel a OneDrive
    od sginfo » 11 zář 2023 15:28 » v Kancelářské balíky
    16
    6687
    od mirekol Zobrazit poslední příspěvek
    20 říj 2023 08:31
  • Excel - problém se vzorci
    od honzzicek » 28 čer 2023 21:45 » v Kancelářské balíky
    2
    1971
    od honzzicek Zobrazit poslední příspěvek
    01 črc 2023 08:57

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

Kdo je online

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