mang ujang or ujanx

mungkin ceritanya ingin coba ngegabungin banyak wokbuk in a folder ke
satu wokbuk
dalam contoh ini ratusan xls file yang akan di buka di taruh di folder
yg diberinama subdirectory
pada saat penggabungan data jika telah melewati batas row 65536 maka
akan dibuat sheet baru dan mengcopy data dimulai dari A2 bukan dari
A1, karena A1 biasanya sbg header atas file yang berstruktur sama


tapi mohon maaf koneksi lagi lemot banget jadi ga bisa attached sample
wokbuknya.. (soalnya lagi di gunung nehhh mana hujan.. becek.. ga ada
ojek..)

Sub CombineSheets()

    Dim Path            As String,FileName        As String
    Dim tWB             As Workbook, tWS       As Worksheet, mWB
      As Workbook
    Dim aWS             As Worksheet
    Dim RowCount        As Long
    Dim uRange          As Range

 Path = ThisWorkbook.Path & "\subdirectory\"

 Application.EnableEvents = False
 Application.ScreenUpdating = False
 Set mWB = Workbooks.Add(1)
 Set aWS = mWB.ActiveSheet
 If Right(Path, 1) <> Application.PathSeparator Then
  Path = Path & Application.PathSeparator
 End If
 FileName = Dir(Path & "*.xls", vbNormal)
 Do Until FileName = ""
  If Path <> ThisWorkbook.Path Or FileName <> ThisWorkbook.Name Then
   Set tWB = Workbooks.Open(FileName:=Path & FileName)
   For Each tWS In tWB.Worksheets
    Set uRange = tWS.Range("A2", tWS.Cells(tWS.UsedRange.Row +
tWS.UsedRange.Rows _
     .Count - 1, tWS.UsedRange.Column + tWS.UsedRange.Columns.Count - 1))
    If RowCount + uRange.Rows.Count > 65536 Then
     aWS.Columns.AutoFit
     Set aWS = mWB.Sheets.Add(After:=aWS)
     RowCount = 0
    End If
    If RowCount = 0 Then
     aWS.Range("A1", aWS.Cells(1, uRange.Columns.Count)).Value = _
      tWS.Range("A1", tWS.Cells(1, uRange.Columns.Count)).Value
     RowCount = 1
    End If
    aWS.Range("A" & RowCount + 1).Resize(uRange.Rows.Count,
uRange.Columns.Count).Value _
     = uRange.Value
    RowCount = RowCount + uRange.Rows.Count
   Next
   tWB.Close False
  End If
  FileName = Dir()
 Loop
 aWS.Columns.AutoFit
 mWB.Sheets(1).Select
 Application.EnableEvents = True
 Application.ScreenUpdating = True


 Set tWB = Nothing
 Set tWS = Nothing
 Set mWB = Nothing
 Set aWS = Nothing
 Set uRange = Nothing
End Sub



2009/2/27, nm kid <[email protected]>:
> Sdr Sandy Warsito,
>
> Langkah pertama adalah mendapatkan nama-nama workbook tersebut. Hal ini bisa
> dilakukan menggunakan Application.FileSearch (tapi tidak berfungsi pada
> xl2007), atau dengan scripting FSO (tetapi vba harus direferensikan ke
> Scripting Runtime Library, atau menggunakan WinAPI yang memanfaatkan Kernel,
> dan masih banyak lagi.
>
> Pada file terlampir, saya gunakan WinApi, yang memang agak ribet jika tidak
> terbiasa, karena harus menyesuaikan argumen fungsi dengan fungsi WinAPI
> (waduh, gimana njelasinnya ya.. kira-kira seperti itulah)
>
> Tetapi, bentukannya baku dan relatif lebih cepat, karena metode ini juga
> digunakan oleh Windows dalam kegiatan yang berhubungan dengan file.
>
> Daftar workbook bisa disimpan dalam bentuk array variabel ataupun langsung
> ke sheet. Saya gunakan langsung ke sheet aktif tempat data berkumpul
> nantinya.
>
> Langkah kedua adalah membuka masing-masing workbook dari daftar workbook
> tadi, yang disertai pembacaan nilai pada cell A1 di setiap worksheetnya,
> atau di worksheet tertentu (butuh sedikit perubahan saja), lalu menulis
> nilai tersebut di workbook awal sheet tempat berkumpul data, diikuti
> penutupan workbook.
>
> Hal ini akan di loop hingga seluruh workbook.
>
> Semoga bermanfaat,
> kid.
>
>
> 2009/2/26 Sandy Warsito <[email protected]>
>
>>   Mohon bantuannya,
>>
>> Bagaimana kodenya untuk membuka satu-satu sekitar 100 an workbooks di satu
>> folder lalu mencopy value cel A1 di tiap-tiap workbook itu ke satu
>> workbook.
>>
>> .
>>
>>
>>
>

Kirim email ke