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

Excel VBA - Automatyzacja importu danych z wielu plików .txt do arkusza

akrtodifi 08 Jan 2014 23:06 3312 20
ADVERTISEMENT
  • #1 13155140
    akrtodifi
    Level 9  
    Posts: 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.
  • ADVERTISEMENT
  • #3 13156485
    akrtodifi
    Level 9  
    Posts: 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.
  • #5 13156522
    akrtodifi
    Level 9  
    Posts: 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.
  • ADVERTISEMENT
  • #7 13157679
    akrtodifi
    Level 9  
    Posts: 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 13157954
    adamas_nt
    VIP Meritorious for electroda.pl
    Posts: 5320
    Help: 1508
    Rate: 659
    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 13159405
    PRL
    Level 41  
    Posts: 6988
    Help: 953
    Rate: 924
    Code: text
    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? Buy me a coffee.
  • ADVERTISEMENT
  • Helpful post
    #10 13159773
    markoz7874
    Level 31  
    Posts: 1776
    Help: 132
    Rate: 208
    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 13163535
    markoz7874
    Level 31  
    Posts: 1776
    Help: 132
    Rate: 208
    PRL wrote:
    I co, już po problemie?;)

    Zadałeś za trudne pytanie ;)
  • #13 13163631
    akrtodifi
    Level 9  
    Posts: 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
  • ADVERTISEMENT
  • Helpful post
    #14 13163715
    markoz7874
    Level 31  
    Posts: 1776
    Help: 132
    Rate: 208
    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: text
    Log in, to see the code


    A dokładniej
    Code: text
    Log in, to see the code
  • #15 13169178
    akrtodifi
    Level 9  
    Posts: 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 13169211
    PRL
    Level 41  
    Posts: 6988
    Help: 953
    Rate: 924
    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ą.
    Helpful post? Buy me a coffee.
  • #17 13169312
    markoz7874
    Level 31  
    Posts: 1776
    Help: 132
    Rate: 208
    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 13169315
    akrtodifi
    Level 9  
    Posts: 9
    Dziękuję bardzo za wcześniejszą pomoc i przepraszam za swoje zachowanie. Bardzo mi pomogliście!
  • #20 13169953
    markoz7874
    Level 31  
    Posts: 1776
    Help: 132
    Rate: 208
    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 13170246
    akrtodifi
    Level 9  
    Posts: 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

Topic summary

LABEL_AI_GENERATED
Dyskusja dotyczy automatyzacji importu danych z wielu plików .txt do arkusza Excel za pomocą VBA. Użytkownik, który nie ma doświadczenia w programowaniu, poszukuje rozwiązania, które umożliwi mu import danych z kilkuset plików, zmieniając jednocześnie nazwę arkusza na nazwę pliku źródłowego. Uczestnicy forum proponują różne fragmenty kodu VBA, które wykorzystują pętle do przetwarzania plików oraz dodawania nowych arkuszy. Wskazują również na konieczność używania zmiennych oraz nagrywania makr w celu dostosowania kodu do własnych potrzeb. Użytkownik wyraża wdzięczność za pomoc i prosi o dalsze wsparcie w razie problemów.
AI summary based on the discussion. May contain errors.
ADVERTISEMENT