Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

VBA Excel - import wybranych plików *.dat do excela

uniwheels 07 Mar 2012 09:36 3870 5
  • #1 07 Mar 2012 09:36
    uniwheels
    Poziom 7  

    Witam
    Stworzyłem programik, który importuje z folderów i podfolderów pliki *.dat do Excela.
    Pierwszy przycisk (makro) otwiera po kolei wszystkie pliki dat i zapisuje do jednego arkusza w pierwszy wolny wiersz.
    Drugi makro importuje konkretny plik z konkretnego folderu. W folderze dane znajdują się podfoldery np. 0112 , 0212, 0312 które oznaczają miesiąc i rok.
    W folderze np. 0212 znajdują się pliki nazwami ddmmrrrr.dat np. 02032012.dat .

    Drugie makro działa szybko, natomiast w pierwszym przypadku otwieranie wszystkich plików (całej historii) troszkę trwa.

    Jak napisać makro, w którym będę mógł podać zakres dat z dwóch różnych podfolderów wg daty, np. importuj pliki od 15.02.2012 do 05.03.2012?
    Wiąże się to z importem danych z dwóch różnych podfolderów. Nie mogę sobie z tym poradzić.

    Pozdrawiam serdecznie.

  • #2 07 Mar 2012 10:12
    adamas_nt
    Moderator Programowanie

    Może zamienić daty na nazwy plików/folderów i podstawić do instrukcji warunkowej. Podpowiem tylko, że operatory porównania w Excelu (i VBA) działają również na wartościach tekstowych...

    VBA Excel - import wybranych plików *.dat do excela

  • #3 07 Mar 2012 12:23
    uniwheels
    Poziom 7  

    witam

    dane sa generowane przez urządzenie na serwer w takiej postaci jak napisałem wyżej.Niestety nie mam możliwości ingerencji w sposób rejestracji tych danych. Nie ma problemu impotem wszystkich lub jednego pliku *.dat do excela - robię to identycznie jak z importem *.txt
    Import z folderu o zmiennej nazwie i zmiennej nazwie pliku *.dat poradziłem sobie dwoma inputboxami gdzie pobierane są ( zmienna a-nazwa folderu i zmienna b-nazwa pliku). Do importu wszystkich plików *.dat z folderu i podfolderu urzyłem krótkiego kodu który znalazłem na sieci. Nie wiem natomiast jak napisać pętlę która będzie otwierała pliki z wybranego zakresu daty np. od 25022012 do 03032012. Oczywiście nazwa konkretnego pliku jest datą.

    Dodano po 23 [minuty]:

    Import wszystkich plików (działa poprawnie) - fragment kodu

    Sub Przycisk1_Kliknięcie()

    Dim path1 As String, path2 As String, plik As String
    Dim folder As Object, pfolder As Object

    Application.ScreenUpdating = False

    path2 = "\\Serwer\test"
    Set folder = CreateObject("Scripting.FileSystemObject").GetFolder(path2).SubFolders
    For Each pfolder In folder
    path1 = pfolder & "\"
    plik = Dir(path1 & "*.dat")
    Do While plik <> ""
    With Workbooks.Open(path1 & plik)

    Range("A1:A100").Select
    Selection.Copy
    Windows("Dane.xlsm").Activate
    Sheets("Arkusz2").Select
    For Each kom In Range("A1:A65536")
    If IsEmpty(Range("A1")) Then Range("A1").Select: Exit For
    If IsEmpty(kom.Value) And IsEmpty(Cells(kom.Row, 1)) Then
    Cells(kom.Row, kom.Column).Select
    Exit For
    End If
    Next

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    ActiveWindow.SmallScroll Down:=-18


    'MsgBox .FullName, vbInformation, " w folderze " & path2
    .Close SaveChanges:=False
    End With
    plik = Dir
    Loop
    Next

    End sub



    Potrzbuję jakąś pętlę żeby otwierać po kolei pliki których nazwa jest datą. Nie mam pojęcia jaki licznik zastosować jeżeli pierwszym będzie np 27022012 a następnym 28022012.
    uffff myślę że Adam zrozumiałeś co chcę zrobić :)

  • Pomocny post
    #4 07 Mar 2012 23:15
    adamas_nt
    Moderator Programowanie

    Po mojemu powinno działać coś takiego (nie testowane)

    Kod: vb
    Zaloguj się, aby zobaczyć kod
    W drugą stronę: można z nazwy pliku wyciągnąć datę i porównywać daty.

  • #5 08 Mar 2012 10:04
    uniwheels
    Poziom 7  

    Wprowadziłem Twoje poprawki i wygląda to następująco na przykładach:

    https://obrazki.elektroda.pl/6649916400_1331197109.jpg

    Data Min 2012-02-03
    Data Max 2012-02-08
    Pliki otworzone 2012-02-04 2012-03-03
    2012-02-05 2012-03-04
    2012-02-06 2012-03-05
    2012-02-07 2012-03-06
    2012-02-08 2012-03-07

    Data Min 2012-03-01
    Data Max 2012-03-05
    Pliki otworzone 2012-02-02 2012-03-02
    2012-02-03 2012-03-03
    2012-02-04 2012-03-04
    2012-02-05 2012-03-05

    Data Min 2012-03-02
    Data Max 2012-03-04
    Pliki otworzone 2012-02-03 2012-03-04
    2012-02-04


    Otwiera nieprawidłowe pliki.

    Nie otwiera nic w przypadku kiedy podany jest przełom miesiąca np. 2012-02-26 do 2012-03-02

    Jeżeli będziesz miał jakieś sugestie to napisz.

    Pozdrawiam Paweł

  • #6 10 Mar 2012 06:41
    uniwheels
    Poziom 7  

    Otrzymałem poradę aby porównać zmienne jako daty :

    Do While plik <> ""
    'zmienna daty pliku
    dtFile = DateSerial(Mid(plik,5,4),mid(plik,3,2),left(plik,2))
    If dtFile >= dta1 And dtFile <= dta2 Then
    (...)
    End If
    plik = Dir
    Loop

    Zmieniłem ten fragment w kodzie i działa rewelacyjnie

    Dzięki serdeczne

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME