makasih pak kid, nanti saya pelajari dulu untuk link http://excel-mr-kid.blogspot.co.id/2011/07/koneksi-data-ke-text-file-01.html
ini kayanya jawaban dari kasus saya yang sebelumnya Pada 20 April 2017 22.07, 'Mr. Kid' [email protected] [belajar-excel] < [email protected]> menulis: > > > oh ok, jadi urutan kolomnya tetap. > > Maaf ya, karena sudah terlalu banyak tanya... > Ada baiknya Anda membaca email ini sampai akhir dan berusaha memahaminya. > > Untuk kasus Anda ini, sebenarnya bisa (ingat, sebenarnya bisa) > diselesaikan dengan mendefinisikan array tersebut berisi banyak sekali > elemen. > Contoh : Array(2,2,2,2,2,dst sampai banyak banget sebanyak jumlah kolom > terbanyak yang mungkin dimiliki oleh suatu text file entah yang mana) > Meski solusinya sederhana demikian, implikasinya tidaklah sederhana walau > tampak seakan akan sudah dinamis. > > Begini, > Untuk proses membaca text file (banyak text file) dan akan disalin ke > sebuah worsheet, umumnya dilakukan dengan salah satu cara berikut : > 1. memanfaatkan data connection ke text file. > > Cara ini mengandalkan file schema.ini di sebuah folder yang berisi > text file yang akan dibaca > > Cara ini cocok untuk delimited text file. > > Dalam schema.ini hanya berisi 1 nama file, misalnya myText.txt > > Di Excel, pada sebuah sheet dibuat data connection ke text file yang > merujuk ke nama file myText.txt > > Proses di dalam VBA adalah : > 1. meng-copy text file asal (misal bernama a.txt) ke folder berisi > schema.ini tadi, dengan nama text file diganti menjadi myText.txt > 2. melakukan proses refresh > 3. melakukan copy dari sheet hasil data connection (misal bernama > sheet 'Koneksi') dan paste values ke sheet 'KumpulanData' > *** Jadi, misal di folder bernama SumberTextFile berisi file a.txt, > b.txt, c.txt dsb > *** di folder bernama Proses berisi schema.ini (dibuat dengan > notepad) dan text file bernama myText.txt > *** Proses loop berisi : > 1. copy a.txt dari folder bernama SumberTextFile ke folder > Proses dengan nama file menjadi myText.txt > Filecopy "D:\SumberTextFile\" & sFile , > "D:\Proses\myText.txt" 'sfile akan berganti isinya tergantung proses > loop > 2. Refresh > thisworkbook.refreshall > 3. copas value antar sheet > sheets("Koneksi").range("a1"). > currentregion.offset(1).copy > with sheets("KumpulanData") > > .cells(.rows.count,1).end(xlup).offset(1).pastespecial > xlpastevalues 'sesuaikan opsi jenis pastenya sesuai kebutuhan > end with > > ## Cara ini memiliki keuntungan karena dimungkinkan adanya > pengolahan terhadap data (bisa dilakukan ETL terhadap isi text file) > menggunakan query, misalnya mengagregat atau memfilter dan sebagainya. Jadi > yang diambil dari textfile bisa pada record terpilih atau kolom-kolom > tertentu maupun kolom-kolom baru hasil komputasi tertentu. > ## Prosesnya cepat, nama file yang diproses tetap, yaitu myText.txt > ## lebih lengkap tentang membuat koneksi ke sebuah text file bisa > dilihat mulai dari sini > <http://excel-mr-kid.blogspot.co.id/2011/07/koneksi-data-ke-text-file-01.html> > . > ## Pada dasarnya datatype akan disesuaikan dengan isi kolom > tersebut. > > 2. memanfaatkan methods OpenText milik object Workbooks. > > Silakan lihat di Excel VBA Help -> Excel Object Model References -> > Workbooks -> OpenText > > Cocok untuk text file yang mencerminkan datatype setiap kolom > (berapapun kolomnya, statis maupun dinamis) yang konsisten. > > Permasalahan yang merepotkan adalah penentuan datatype setiap field > jika memang dibutuhkan karena tidak konsistennya datatype setiap nilai > dalam sebuah kolom tertentu. Karena diperlukan tabel referensi yang > mendefinisikan setiap karakteristik text file pada suatu sheet > > Jika datatype nya sama untuk setiap kolom akan dipaksa bertipe text, > maka perlu pendifinisian array pada inputan fieldinfo > > Jika datatype nya sama untuk setiap kolom, tetapi jumlah kolomnya > dinamis, maka pendefinisian array pada inputan fieldinfo cukup > didefinisikan sebanyak jumlah kolom terbanyak yang diperkirakan. Misal, > semua file yang dibaca tidak mungkin punya kolom melebihi 50 bijik, maka > langsung buat array fieldinfo berisi 49 elemen. > > Proses loop berisi : > 1. membuka text file yang di loop dengan workbooks.opentext > 2. melakukan copas value dari hasil workbooks.opentext ke workbook > lokasi sheet tujuannya. Misal ke sheet 'kumpulan data' > 3. menutup workbooks hasil workbooks.opentext tanpa di-save agar > isi text file tidak berubah. > > 3. Membaca setiap baris text file dan melakukan parse (split text) > > Proses loop berisi : > 1. membuka text file dengan Open filenya for input as blabla dan > seterusnya > 2. loop setiap baris isi text file dengan do while not eof blabla > 3. menyimpan isi baris ke sebuah variabel string > 4. melakukan split text dan menyimpannya ke sebuah variabel array > bertipe string dengan split( variabel_isi_baris , delimiternya ) > 5. menulis array hasil split text ke worksheet tujuan > 6. menutup text file dengan close blabla > > --- Kembali ke kasus --- > Pada kasus Anda ini, yang digunakan adalah fitur Get External Data (untuk > membentuk query table) tapi memanfaatkan opentext (Anda record macro nya > dengan ribbon Get External Data -> pilih From Text File). > Proses membuat query table disetiap kali membaca text file baru yang > di-loop adalah kegiatan yang mubazir. > Proses split text oleh opentext yang dilakukan berulang dengan ditentukan > array fieldinfo datatype nya yang terlalu banyak karena jumlah kom yang > berbeda-beda antar text file juga menambah beban. > Ada baiknya, Anda beralih untuk menggunakan cara 1. > -------------------------------- > > Regards, > Kid > > > > 2017-04-20 11:43 GMT+07:00 him mah [email protected] [belajar-excel] < > [email protected]>: > >> >> >> kalau wadah sheet nya sih ngga masalah pak, berapapun kolomnya >> >> yang masalah adalah jumlah kolom yang ada di text filenya >> terkait dengan TextFileColumnDataTypes >> >> kalau 8 kolom seperti ini >> Array(1,1,1,1,1,1,1,1) >> >> kalau 10 kolom seperti ini >> Array(1,1,1,1,1,1,1,1,1,1) >> >> kalau 15 kolom seperti ini >> Array(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1) >> >> >> jadi gimana mencuat array nya menjadi dinamis sesuai dengan jumlah kolom >> yang ada di text filenya >> >> terima kasih >> >> >> >> Pada 20 April 2017 10.23, 'Mr. Kid' [email protected] [belajar-excel] < >> [email protected]> menulis: >> >>> >>> >>> hmmm.... >>> >>> 1. Berarti a.txt yang berisi 8 kolom (misalnya) dengan b.txt yang berisi >>> 17 kolom (misalnya) memiliki 8 kolom pertama yang sama ? >>> 2. Sedang c.txt yang berisi 23 kolom (misalnya) akan memiliki 8 kolom >>> pertama yang sama dengan a.txt dan b.txt, dan 17 kolom pertama yang sama >>> dengan b.txt ? >>> 3. Wadah data (sebuah sheet tempat menyimpan data dari kedua .txt file >>> tersebut) berisi banyak kolom mengikuti jumlah kolom terbanyak yang sudah >>> diketahui ? (misal 49 kolom, karena terkadang atau pernah ada z.txt yang >>> berisi 49 kolom) >>> >>> Demikiankah ? >>> >>> Regards, >>> Kid >>> >>> >>> >>> >>> >>> >>> 2017-04-18 14:25 GMT+07:00 him mah [email protected] [belajar-excel] >>> <[email protected]>: >>> >>>> >>>> >>>> Seperti itu pak kid. Cuma sheet hasilnya cuma satu. Data akan >>>> ditambahkan dibaris selanjutnya. >>>> >>>> Yang jadi masalah adalah jumlah kolom yang ada di text file >>>> >>>> Pada tanggal 18 Apr 2017 12:54, "'Mr. Kid' [email protected] >>>> [belajar-excel]" <[email protected]> menulis: >>>> >>>>> >>>>> >>>>> hmmm.... >>>>> Setiap file txt yang dibaca akan di copy menambahkan di sheet tertentu >>>>> yang sesuai ya. >>>>> Jadi ada 3 txt file : >>>>> a.txt akan di-copy menambahkan data di sheet dtA, >>>>> b.txt akan di-copy menambahkan data di sheet dtB, >>>>> c.txt akan di-copy menambahkan data di sheet dtC. >>>>> >>>>> Tapi nama txt filenya tidak tetap, seperti bulan ini namanya >>>>> a-Apr17.txt, b-Apr17.txt, c-Apr17.txt >>>>> Jumlah kolom di a.txt berbeda dengan di b.txt dan berbeda dengan c.txt. >>>>> >>>>> Begitu ya ? >>>>> >>>>> >>>>> 2017-04-18 7:18 GMT+07:00 him mah [email protected] >>>>> [belajar-excel] <[email protected]>: >>>>> >>>>>> >>>>>> >>>>>> sebenarnya tujuannya akan dibuat database excel dari beberapa file txt >>>>>> jadi untuk file D:\aku.txt >>>>>> akan dibuat dinamis sesuai dengan lsit file yang ada di sheet >>>>>> >>>>>> mungkin ada cara lain pak kid >>>>>> >>>>>> Pada 17 April 2017 19.35, 'Mr. Kid' [email protected] >>>>>> [belajar-excel] <[email protected]> menulis: >>>>>> >>>>>>> >>>>>>> >>>>>>> Boleh tahu kenapa pakai VBA? >>>>>>> Bagaimana kalau pakai data connection saja yang tanpa VBA? >>>>>>> >>>>>>> Regards, >>>>>>> Kid >>>>>>> Sent from my smart enough phone >>>>>>> >>>>>>> On Apr 17, 2017, at 13:10, him mah [email protected] >>>>>>> [belajar-excel] <[email protected]> wrote: >>>>>>> >>>>>>> >>>>>>> >>>>>>> dear all >>>>>>> >>>>>>> maaf mau tanya lagi terkait dengan >>>>>>> impor data dari text file ke excel >>>>>>> >>>>>>> kalau dari menu record macro >>>>>>> terbentuk kode seperti ini >>>>>>> >>>>>>> >>>>>>> With ActiveSheet.QueryTables.Add(Connection:= _ >>>>>>> "TEXT;" & D:\aku.txt" _ >>>>>>> , Destination:=Worksheets("Sheet 1").Range("$A$1")) >>>>>>> .Name = "ImportingFileName" >>>>>>> .FieldNames = False >>>>>>> .RowNumbers = False >>>>>>> .FillAdjacentFormulas = False >>>>>>> .PreserveFormatting = True >>>>>>> .RefreshOnFileOpen = False >>>>>>> .RefreshStyle = xlInsertDeleteCells >>>>>>> .SavePassword = False >>>>>>> .SaveData = True >>>>>>> .AdjustColumnWidth = True >>>>>>> .RefreshPeriod = 0 >>>>>>> .TextFilePromptOnRefresh = False >>>>>>> .TextFilePlatform = 437 >>>>>>> .TextFileStartRow = 2 >>>>>>> .TextFileParseType = xlDelimited >>>>>>> .TextFileTextQualifier = xlTextQualifierDoubleQuote >>>>>>> .TextFileConsecutiveDelimiter = False >>>>>>> .TextFileTabDelimiter = False >>>>>>> .TextFileSemicolonDelimiter = False >>>>>>> .TextFileCommaDelimiter = True >>>>>>> .TextFileSpaceDelimiter = False >>>>>>> .TextFileColumnDataTypes = Array(1,1,1,1,1,1,1,1) >>>>>>> .TextFileTrailingMinusNumbers = True >>>>>>> .Refresh BackgroundQuery:=False >>>>>>> End With >>>>>>> >>>>>>> >>>>>>> yang masih menjadi kendala adalah di baris >>>>>>> >>>>>>> .TextFileColumnDataTypes = Array(2,2,2,2,2,2,2,2) >>>>>>> >>>>>>> kalau seperti yang diatas kan jumlah kolomnya ada 8 >>>>>>> misal kita tidak tahu jumlah kolomnya ada berapa >>>>>>> bisa 8 bisa lebih kecil atau bisa lebih besar >>>>>>> >>>>>>> kira-kira untuk >>>>>>> >>>>>>> baris tersebut modifikasi seperti apa ya >>>>>>> >>>>>>> >>>>>>> terima kasih >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>> >>> >> > >

