vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest piątek, 19 kwietnia 2024 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

Import danych z wielu plików tekstowych do Excela - nietypowy problem


otwartyotwarty rozpoczął: terryogara postów: 4



napisał: Trebor
postów: 1209


umieszczony:
16 marca 2016
17:19

edytowany:
16 marca 2016
17:22

  
Przeglądnij poniższy sposób
Sub wczytaj_pliki()
Dim katalog As String, Plik As String

katalog = "C:\Users\Robert\Desktop\Test\" ' katalog z plikami
Plik = Dir(katalog & "*.txt")
While Plik <> ""
Worksheets.Add.Name = Plik

Call zapis(Plik, katalog & Plik)
Plik = Dir
Wend

End Sub

Function zapis(arkusz As String, zrodlo As String)

    With Sheets(arkusz).QueryTables.Add(Connection:="TEXT;" & zrodlo, Destination:=Range("$A$1"))
        .Name = arkusz
        .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 = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Function


Funkcję musisz przerobić pod strkturę swoich plików. Musisz także usuwać arkusze przed kolejnym importem.
napisał: lesniacek
postów: 1


umieszczony:
14 marca 2016
15:29

  
1) czy można by zmodyfikować to makro tak, aby importowało każdy plik do osobnego arkusza?? ja nie potrafię, pierwszy wychodzi ok, ale następne są puste...

2) czy można by podczas importu zmieniać nazwy arkuszy na takie, jakie ma importowany plik?? też nie potrafię...

Będę wdzięczny za wskazówki, bo jestem początkujący w tym temacie...
napisał: gpopiel
postów: 20


umieszczony:
20 czerwca 2009
21:38

edytowany:
20 czerwca 2009
21:46

  
Cytat:
Mam następujący problem. Chciałbym załadować za pomocą makra do komórek dane z plików tekstowych znajdujących się w katalogu "C:\temp". Nazwy plików są w postaci numerów od 1 do 100, czyli: 1.txt, 2.txt, 3.txt... itd. Oczywiście można to zrobić nagrywając makro, za każdym razem importując dane z następnego pliku tekstowego, ale jednak chciałbym, żeby:

Opcja I

Makro załadowało dane z tych plików, "nie wiedząc" jakie są ich nazwy, czy jest to możliwe? Chodzi o to, że np. pokazuję programowi katalog, w którym są pliki tekstowe, resztę robi program działając wedle jakiejś procedury, np. żeby ładował pliki alfabetycznie, dzięki temu mając zachowaną kolejność ładowania danych, co jest dla mnie bardzo istotne.


Prosty programik:

Sub wczytaj_pliki()
aktywny_plik = Excel.ActiveWorkbook.Name 'nazwa aktywnego pliku
Cells.Clear ' czyszczenie arkusza
wiersz = 1 ' ustawienie pierwszego wiersze
Set fs = Application.FileSearch
katalog = "d:\moje\vba\pliki\" ' katalog z plikami
With fs
    .LookIn = katalog ' szukamy plikow w tym katalogu
    .Filename = "*.txt" ' rozszezenie plikow
    If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then ' sprawdzenie czy sa takie pliki
        For i = 1 To .FoundFiles.Count 'petla plikow od 1 do liczby plikow
                Name = fs.FoundFiles(i) ' sciezka bieżącego pliku txt
                Workbooks.OpenText Filename:=fs.FoundFiles(i), Origin:=852, _
                StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(3, _
                1), Array(6, 1)), TrailingMinusNumbers:=Tru 'sposob wczytania pliku txt do excela
                
                wiersz_pliku_txt = 1 ' ustawienie pierwszego wiersze pliku txt
                
            Do While Cells(wiersz_pliku_txt, 1) <> ""
                Workbooks(aktywny_plik).Sheets(1).Cells(wiersz, 1) = Cells(wiersz_pliku_txt, 1) 'kopiowanie pierwszej kolumny
                Workbooks(aktywny_plik).Sheets(1).Cells(wiersz, 2) = Cells(wiersz_pliku_txt, 2) 'kopiowanie drugiej kolumny
                'dodaj takich wierszy ile chcesz wczytac klumn lub zrob petle
                wiersz_pliku_txt = wiersz_pliku_txt + 1 'kolejny wiersz pliku txt
                wiersz = wiersz + 1 ' kolejny wiersz pliku z
            Loop
                Excel.ActiveWorkbook.Close False ' zamkniecie pliku txt
        Next' nastepny plik txt
        
    Else
        MsgBox "There were no files found." 'informacja ze nie ma takich plikow
    End If
End With

End Sub


S
napisał: terryogara
postów: 1


umieszczony:
19 czerwca 2009
21:28

  
Mam następujący problem. Chciałbym załadować za pomocą makra do komórek dane z plików tekstowych znajdujących się w katalogu "C:\temp". Nazwy plików są w postaci numerów od 1 do 100, czyli: 1.txt, 2.txt, 3.txt... itd. Oczywiście można to zrobić nagrywając makro, za każdym razem importując dane z następnego pliku tekstowego, ale jednak chciałbym, żeby:

Opcja I

Makro załadowało dane z tych plików, "nie wiedząc" jakie są ich nazwy, czy jest to możliwe? Chodzi o to, że np. pokazuję programowi katalog, w którym są pliki tekstowe, resztę robi program działając wedle jakiejś procedury, np. żeby ładował pliki alfabetycznie, dzięki temu mając zachowaną kolejność ładowania danych, co jest dla mnie bardzo istotne.


Opcja II

Makro z góry "wie", jakie będzie nazewnictwo plików tekstowych, czyta dane od 1.txt do 100.txt najlepiej poprzez pętlę, zwiększając licznik za każdym razem o 1 i w jakiś sposób (właśnie, jaki?) przenosi tę zwiększoną wartość do łańcucha nazwy pliku tekstowego, tak żeby czytał następny plik, czyli np. wczytał dane z pliku 52.txt, poprzez wartość licznika w danym przebiegu pętli 52, zwiększa licznik o 1 - mamy 53, tak więc makro zaczyna czytać plik o nazwie 53.txt...


Będę wdzięczny za kody ilustrujące Opcję I lub II.


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z