Elektroda.pl
Elektroda.pl
X
Serwerowe OpowieściSerwerowe Opowieści
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Excel - Pobieranie danych z plików txt do arkusza

08 Sty 2014 23:06 2529 20
  • Poziom 7  
    Dzień dobry.
    Jestem kompletnie zielony w programowaniu VBA.

    Potrzebuje dokonać importu danych z kilkuset plików .txt. Z pojedynczym nie mam problemu, ale chciałbym zautomatyzować cały proces.

    Excel pobiera z pliku .txt dane do arkusza oraz zmienia jego nazwę (arkusza) na taką samą co plik z którego dane zostały pobrane. (Name,Date,Open,High,Low,Close,Volume + niżej dane)

    i tak zapętlone.

    Proszę o pomoc.
  • Serwerowe OpowieściSerwerowe Opowieści
  • Pomocny post
    Poziom 38  
    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Serwerowe OpowieściSerwerowe Opowieści
  • Poziom 7  
    Code:
    Sub Importuj()
    
    Dim Plik As String
    Plik = Dir("D:\praca\notowania\omegancn\*.txt")
    Do While Plik <> ""
            With ActiveSheet.QueryTables.Add(Connection:= _
            "TEXT;D:\notowania\omegancn\01CYBATON.txt", Destination:=Range("$A$1"))
            .Name = "01CYBATON"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .TextFilePromptOnRefresh = False
            .TextFilePlatform = 852
            .TextFileStartRow = 1
            .TextFileParseType = xlDelimited
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileConsecutiveDelimiter = False
            .TextFileTabDelimiter = True
            .TextFileSemicolonDelimiter = False
            .TextFileCommaDelimiter = True
            .TextFileSpaceDelimiter = False
            .TextFileColumnDataTypes = Array(1, 5, 1, 1, 1, 1, 1)
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
        End With
        Plik = Dir
    Loop
    End Sub

    Sub Makro1()
    '
    ' Makro1 Makro
    '

    '

    End Sub


    Mógłbym prosić o połączenie tego kodu z tym powyżej?
    Przydałaby się także alternatywa dla zapisu do nowego arkusza, z zapisem do nowego pliku(skoroszytu) również z nazwą tak jak plik txt.
  • Pomocny post
    Poziom 38  
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    D:\Notowania, czy D:\Praca\Notowania?

    Zdecyduj się.;)
  • Poziom 7  
    D:\Notowania

    :)

    Dodano po 34 [minuty]:

    PRL Wszystko super działa tylko chciałbym żeby w pierwszym wariancie dane importowało do nowego arkusza z nazwa pliku, w drugim natomiast do zupełnie nowego skoroszytu (pliku excel) również z nazwą pliku z którego dane zostały importowane.
  • Poziom 38  
    Nagraj makro i popraw według potrzeb.
    Wybacz, ale apetyt rośnie w miarę jedzenia...
    Daj coś z siebie.
  • Poziom 7  
    Siedzę, czytam ale nie daje rady.
    Code:

    Sub Importuj()
    Dim Plik As String
    Plik = Dir("D:\praca\notowania\omegancn\*.txt")
    Do While Plik <> ""
            With ActiveSheet.QueryTables.Add(Connection:= _
            "TEXT;D:\praca\notowania\omegancn\" & Plik, Destination:=Range("$A$1"))
            .Name = Plik
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .TextFilePromptOnRefresh = False
            .TextFilePlatform = 852
            .TextFileStartRow = 1
            .TextFileParseType = xlDelimited
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileConsecutiveDelimiter = False
            .TextFileTabDelimiter = True
            .TextFileSemicolonDelimiter = False
            .TextFileCommaDelimiter = True
            .TextFileSpaceDelimiter = False
            .TextFileColumnDataTypes = Array(1, 5, 1, 1, 1, 1, 1)
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False

        End With
        Plik = Dir
     

    Loop
    End Sub



    Pomógłby ktoś aby importowanie plików odbywało się do nowego arkusza o nazwie pliku z którego pobrano dane?
    Aktualnie wszystko jest w jednym arkuszu i jest to strasznie nieczytelne.
    Nazwa nowego arkusza to także pozycja A2
  • Moderator Programowanie
    Pomyśl, jak radzi kolega PRL. Przecież jeśli wstawiasz kwerendę
    Cytat:
    With ActiveSheet.QueryTables.Add(Conne...
    to wystarczy jak na początku pętli dopiszesz wstawianie nowego arkusza (nagraj makro i przekopiuj), nadanie mu nazwy i aktywowanie (niekonieczne, bo nowy=aktywowany, ale dla porządku). Razem 3 (słownie: trzy) linijki ;)

    Pomocna uwaga: Nowo wstawiony arkusz ma zawsze najwyższy indeks. Odwołanie do niego (Np przy zmianie nazwy): Sheets(sheets.Count).Name="NowaNazwa"
  • Poziom 38  
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Ponawiam pytanie odnośnie ścieżki do plików z danymi wejściowymi.
    Raz jest D:\Notowania, a innym razem D:\Praca\Notowania...
  • Pomocny post
    Poziom 31  
    PRL napisał:
    ..
    Ponawiam pytanie odnośnie ścieżki do plików z danymi wejściowymi.
    Raz jest D:\Notowania, a innym razem D:\Praca\Notowania...

    Tak długo jak założyciel wątku nie będzie się skupiał na tym co robi, żadna pomoc nie ma sensu.
    Druga sprawa, to używanie zmiennych. Jak się już zmienną tworzy, to może warto jej używać a nie w jednym miejscu używa zmiennej, innym razem ścieżkę wpisuje "z ręki"
  • Poziom 31  
    PRL napisał:
    I co, już po problemie?;)

    Zadałeś za trudne pytanie ;)
  • Poziom 7  
    Jak zrobić odwołanie do arkusza w innym skoroszycie_2 gdzie nazwa arkusza to pozycja "A2" ze skoroszytu_1?
    Code:
    =[skoroszyt2.xlsx]nazwa_arkusza!$E$5


    nazwa_arkusza = pozycja A2 z dowolnego arkusza skoroszytu_1
  • Pomocny post
    Poziom 31  
    akrtodifi napisał:
    Jak zrobić odwołanie do arkusza w innym skoroszycie_2 gdzie nazwa arkusza to pozycja "A2" ze skoroszytu_1?
    Code:
    =[skoroszyt2.xlsx]nazwa_arkusza!$E$5


    nazwa_arkusza = pozycja A2 z dowolnego arkusza skoroszytu_1

    Użyj funkcji
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    A dokładniej
    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Poziom 7  
    Code:
    =WYSZUKAJ.PIONOWO(D14;(ADR.POŚR("[notowania.xlsx]"&B14&"!"&Parametry!$B$1));5;0)

    istnieje możliwość dodania warunku, który wyszuka najbliższą mniejszą wartość jeżeli nie znajdzie wartości z D14?
  • Pomocny post
    Poziom 38  
    Istniej możliwość, że w jakiś sposób pokażesz, że nie masz w d. pomagających Tobie osób?
    Jak dotąd tylko pytasz i masz gdzieś, że Ci pomagają.
    Elektroda, to ludzie, a nie tylko serwer z wyszukiwarką.
  • Poziom 31  
    akrtodifi napisał:
    Code:
    =WYSZUKAJ.PIONOWO(D14;(ADR.POŚR("[notowania.xlsx]"&B14&"!"&Parametry!$B$1));5;0)

    istnieje możliwość dodania warunku, który wyszuka najbliższą mniejszą wartość jeżeli nie znajdzie wartości z D14?

    Konkretna odpowiedz na tak konkretnie postawione pytanie brzmi:
    Istnieje :)

    Kolega PRL delikatnie sugeruje, że jeżeli nasze informacje są Tobie pomocne, wypadało by wcisnąć przycisk "pomógł" ;)
    To dla nas informacja zwrotna, że doceniono nasze skromne wysiłki i warto się produkować w Twoim wątku :)
  • Poziom 7  
    Dziękuję bardzo za wcześniejszą pomoc i przepraszam za swoje zachowanie. Bardzo mi pomogliście!
  • Poziom 38  
    Cytat:
    Kolega PRL delikatnie sugeruje,


    że jest starej daty i jego Tata uczył go, że kultura wymaga podziękowania za pomoc.:)
  • Poziom 31  
    akrtodifi napisał:
    Code:
    =WYSZUKAJ.PIONOWO(D14;(ADR.POŚR("[notowania.xlsx]"&B14&"!"&Parametry!$B$1));5;0)

    istnieje możliwość dodania warunku, który wyszuka najbliższą mniejszą wartość jeżeli nie znajdzie wartości z D14?

    Załącz proszę arkusze na których pracujesz, bardzo niewygodnie jest komuś pomagać, kiedy ten ktoś widzi co ma przed oczami, a pomagający musi się domyślać.
  • Poziom 7  
    Rozumiem :) Na razie dziękuję za pomoc. Jak coś po drodze mi się wysypie do będę u Was szukał wsparcie. Widzę macie i fajnie, że się nią dzielicie. Pozdrawiam