Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Excel - Pobieranie danych z plików txt do arkusza

akrtodifi 08 Jan 2014 23:06 2844 20
  • #1
    akrtodifi
    Level 9  
    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.
  • Helpful post
    #2
    PRL
    Level 40  
    Code: vbscript
    Log in, to see the code
  • #3
    akrtodifi
    Level 9  
    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.
  • Helpful post
    #4
    PRL
    Level 40  
    Code: vbscript
    Log in, to see the code


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

    Zdecyduj się.;)
  • #5
    akrtodifi
    Level 9  
    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.
  • #6
    PRL
    Level 40  
    Nagraj makro i popraw według potrzeb.
    Wybacz, ale apetyt rośnie w miarę jedzenia...
    Daj coś z siebie.
  • #7
    akrtodifi
    Level 9  
    Siedzę, czytam ale nie daje rady.
    
    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
  • #8
    adamas_nt
    Moderator of Programming
    Pomyśl, jak radzi kolega PRL. Przecież jeśli wstawiasz kwerendę
    Quote:
    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"
  • #9
    PRL
    Level 40  
    Code: vbscript
    Log in, to see the code


    Ponawiam pytanie odnośnie ścieżki do plików z danymi wejściowymi.
    Raz jest D:\Notowania, a innym razem D:\Praca\Notowania...
  • Helpful post
    #10
    markoz7874
    Level 31  
    PRL wrote:
    ..
    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"
  • #12
    markoz7874
    Level 31  
    PRL wrote:
    I co, już po problemie?;)

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


    nazwa_arkusza = pozycja A2 z dowolnego arkusza skoroszytu_1
  • Helpful post
    #14
    markoz7874
    Level 31  
    akrtodifi wrote:
    Jak zrobić odwołanie do arkusza w innym skoroszycie_2 gdzie nazwa arkusza to pozycja "A2" ze skoroszytu_1?
    =[skoroszyt2.xlsx]nazwa_arkusza!$E$5


    nazwa_arkusza = pozycja A2 z dowolnego arkusza skoroszytu_1

    Użyj funkcji
    Code: vbscript
    Log in, to see the code


    A dokładniej
    Code: vbscript
    Log in, to see the code
  • #15
    akrtodifi
    Level 9  
    =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?
  • Helpful post
    #16
    PRL
    Level 40  
    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ą.
  • #17
    markoz7874
    Level 31  
    akrtodifi wrote:
    =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 :)
  • #18
    akrtodifi
    Level 9  
    Dziękuję bardzo za wcześniejszą pomoc i przepraszam za swoje zachowanie. Bardzo mi pomogliście!
  • #19
    PRL
    Level 40  
    Quote:
    Kolega PRL delikatnie sugeruje,


    że jest starej daty i jego Tata uczył go, że kultura wymaga podziękowania za pomoc.:)
  • #20
    markoz7874
    Level 31  
    akrtodifi wrote:
    =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ć.
  • #21
    akrtodifi
    Level 9  
    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