Hai LB,
Pada prosedur MergeFiles :
>> data daftar nama file ada di baris berbunyi :
Set rngFiles = Sheet1.Range("d6").CurrentRegion.Resize(, 1) 'definisi
daftar file
>> teks folder dari si nama file ada di baris berbunyi :
sPath = Sheet1.Range("d4").Value & "\" 'ambil
nilai path
>> proses mengambil data dilakukan dalam loop per nama file yang disimpan
dalam variabel rngFiles, pada blok for each
>> dalam blok for each tersebut, nama file lengkap (full name) disusun
dengan baris berbunyi :
sFileName = sPath & rngFile.Value 'susun nama file lengkap
>> tabel target didefinisikan oleh baris : (header pertama [terkiri] dari
tabel lokasi hasil penggabungan)
Set rngDBAnchor = Sheet2.Range("a1") 'definisi
anchor header tabel
>> ketika file sumber data ada, maka proses pengambilan data dari file
tersebut dilakukan oleh baris berbunyi :
AmbilData sFileName, 1, "a2", rngDBAnchor.Offset(0, 1), sErrMsg
Artinya, proses pengambilan data dilakukan oleh prosedur bernama AmbilData.
Deklarasi prosedur tersebut berbunyi :
'-------------------------------------
'Prosedur AmbilData :
'-------------------------------------
'Input :
'sFileFullName :: string :: nama file lengkap beserta path dan
ekstensinya yang akan diambil datanya
'vSht :: variant :: nama sheet atau indeks sheet lokasi
data di sFileFullName
'sFirstFieldAddress :: string :: alamat cell baris pertama pada kolom
pertama data
'rngAnchorTargetTable :: range :: object range header pertama di
lokasi paste values
'-------------------------------------
'Kid, Jakarta, 2012-12-16, Excel VBA
'-------------------------------------
Public Sub AmbilData(sFileFullName As String, vSht As Variant,
sFirstFieldAddress As String, _
rngAnchorTargetTable As Range, Optional sRes As
String = vbNullString)
Jadi, prosedur ambil data membutuhkan data inputan berupa :
'sFileFullName :: string :: nama file lengkap beserta path dan
ekstensinya yang akan diambil datanya
'vSht :: variant :: nama sheet atau indeks sheet lokasi
data di sFileFullName
'sFirstFieldAddress :: string :: alamat cell baris pertama pada kolom
pertama data
'rngAnchorTargetTable :: range :: object range header pertama di
lokasi paste values
Pada baris pengambilan data di prosedur MergeFiles tadi, yang berbunyi :
AmbilData sFileName, 1, "a2", rngDBAnchor.Offset(0, 1), sErrMsg
berarti si prosedur AmbilData diberi inputan :
1. variabel teks sFileName (milik prosedur mergefiles yang sudah berisi
nama file lengkap) untuk parameter input bernama sFileFullName (milik
prosedur AmbilData) yang bertipe string ( As String ) yang bertindak
sebagai :: nama file lengkap beserta path dan ekstensinya yang akan diambil
datanya
2. nilai 1 (milik prosedur mergefiles) untuk parameter input bernama vSht
(milik prosedur AmbilData) yang bertipe variant ( As Variant ) yang
bertindak sebagai :: nama sheet atau indeks sheet lokasi data di
sFileFullName
3. nilai teks berbunyi "a2" (milik prosedur mergefiles) untuk parameter
input bernama sFirstFieldAddress (milik prosedur AmbilData) yang bertipe
string ( As String ) yang bertindak sebagai :: alamat cell baris pertama
pada kolom pertama data
4. variabel object range rngDBAnchor.Offset(0, 1) (milik prosedur
mergefiles yang merujuk ke kolom ke-2 [di 1 kolom setelah kolom rngDBAnchor
karena kolom rngDBAnchor akan diisi nama file [tanpa ekstensi]) untuk
parameter input bernama rngAnchorTargetTable (milik prosedur AmbilData)
yang bertindak sebagai :: object range header pertama di lokasi paste values
5. variabel teks sErrMsg (milik prosedur Mergefiles yang masih kosong)
untuk parameter input bernama sRes (milik prosedur AmbilData) yang
bertindak sebagai penampung teks pesan error.
Seluruh proses
Dari penjelasan di atas, jika :
A. daftar nama file mulai di sheet bernama DAFTAR_FILE cell KZ321 membentuk
sebuah daftar 1 kolom banyak baris dan dikelilingi oleh cell kosong (di
atas daftar, di kiri daftar, di kanan daftar, dan di bawah daftar) berarti
baris berbunyi :
Set rngFiles = Sheet1.Range("d6").CurrentRegion.Resize(, 1) 'definisi
daftar file
diubah menjadi :
Set rngFiles = sheets("DAFTAR_FILE").Range("KZ321").CurrentRegion.Resize(,
1) 'definisi daftar file
B. nama folder sumber data disimpan di sheet bernama NAMA_FOLDER cell GJ7,
maka baris :
sPath = Sheet1.Range("d4").Value & "\" 'ambil
nilai path
diubah menjadi :
sPath = Sheets("NAMA_FOLDER").Range("GJ7").Value &
"\" 'ambil nilai path
C. tabel hasil penggabungan ada di sheet bernama HASIL_PENGGABUNGAN dan
tabel dibuat agak tidak berkaidah database dengan header pertama tabel
hasil diletakkan pada cell XY123 dan 1 baris diatas header adalah kosong
(baris XY122 dikosongkan) berarti baris berbunyi :
Set rngDBAnchor = Sheet2.Range("a1") 'definisi
anchor header tabel
diubah menjadi :
Set rngDBAnchor =
sheets("HASIL_PENGGABUNGAN").Range("XY123")
'definisi anchor header tabel
D. Nama sheet sumber data disetiap file selalu yang bernama
DATA_DARI_NEGERI_SEBERANG dan selalu dimulai dari cell SD45 maka baris
pengambilan data yang berbunyi :
AmbilData sFileName, 1, "a2", rngDBAnchor.Offset(0, 1), sErrMsg
diubah menjadi :
AmbilData sFileName, "DATA_DARI_NEGERI_SEBERANG", "SD45",
rngDBAnchor.Offset(0, 1), sErrMsg
Kira-kira demikian.
Jadi, prosedur yang dibentuk seperti AmbilData tersebut dapat disimpan
dalam sebuah library dan bisa digunakan secara luas. Programming tidak
mengenal template prosedur untuk suatu tugas yang bisa diubah-ubah
scriptnya, tetapi yang ada adalah prosedur yang disusun memiliki kemampuan
spesifik dan dapat digunakan secara luas.
Wassalam,
Kid.
2014/1/10 Lazuardi Biru <[email protected]>
>
>
> dh
> dear master
> mau tanya soal vba_MergeTables_multiplefiles buatan pak kid.
>
> kalo data yang mau di ambil pertama di kolom A5
> bunyi makro mana yang harus dirubah.
> dan hasil saya letakan di kolom B2
>
> berikut saya lampirkan filenya
>
> salam
> LB
>
>
>