Pagi Master Master Excel,
Mohon bantuannya untuk kode VBA utk case berikut:
Misalkan ada file Master.xlsx dan Toko A-F.xlsx,
bagaimana cara utk mengcopy otomatis data dari master range C3:G7 ke masing2 file toko tersebut.
Note:
Misalkan File Toko tersebut terprotect (sheet) pass: 123
Apabila ada pertanyaan yg belum jelas, mohon diluruskan.
Sebelumnya saya ucapkan terima kasih.
Salam,
Hamzah
TOKO A.xlsxMASTER.xlsxTOKO B.xlsx
Terjawab oleh Caton
Lihat Jawaban terkait@Hamzah ...
... sudah saya coba kenapa isinya sama semua ya ...
Sama bagaimana mas? Di sheet MASTER pada file MASTER.xlsm range C3:G7 khan sudah terisi formula :
=$A$1&1
yang jika disalin ke Workbook berbeda (misalkan ke file TOKO A.xlsx s.d. TOKO C.xlsx), hasilnya akan mengikuti nilai sel A1 di masing-masing file target. Misalkan untuk file TOKO B.xlsx, hasilnya akan menjadi seperti berikut :
[attachment:62ceda58a2ae1]
Jadi tidak perlu mengganti nilai sel A1 di sheet MASTER file MASTER.xlsm.
... yang saya mau ganti A, copy, paste ke toko a.xlsx ...
Saya hanya mengikuti penjelasan awal Anda. Tidak ada penjelasan ganti ini itu sebelumnya. Lagian, dengan formula di atas, sudah otomatis mengubah nilai pada masing-masing file target.
Saya tidak tahu apakah Validation List pada sel A1 sheet Master akan berisi nama file target atau apa. Anda tidak menjelaskannya. Jadi saya asumsikan saja isinya adalah nama file target. Untuk perubahan scriptnya bisa seperti berikut :
Public Sub CopyData() Dim xlWB As Workbook, xlWS As Worksheet Dim vIDX As Variant Dim sFN As String Dim lIdx As Long Err.Clear: On Error GoTo errHandler '+-- Salin data dari validation list. vIDX = Evaluate(Sheet1.Range("A1").Validation.Formula1) vIDX = Application.Transpose(vIDX) Err.Clear: On Error GoTo 0 Application.ScreenUpdating = False For lIdx = LBound(vIDX) To UBound(vIDX) If Len(vIDX(lIdx)) Then '+-- Tetapkan nama file target. sFN = Replace("TOKO {X}.xlsx", "{X}", vIDX(lIdx)) sFN = ThisWorkbook.Path & "\" & sFN '+-- Periksa apakah file exist? If Dir(sFN) <> vbNullString Then '+-- Buka file target dan tetapkan ke object xlWB. Set xlWB = ThisWorkbook.Application.Workbooks.Open(Filename:=sFN, UpdateLinks:=False) '+-- Tetapkan object xlWS ke sheet pertama. Set xlWS = xlWB.Worksheets(1) '+-- Buka proteksi sheet. xlWS.Unprotect "123" '+-- Ubah kode indeks di sel A1. ThisWorkbook.Worksheets(1).Range("A1") = vIDX(lIdx) '+-- Salin data dari file master. ThisWorkbook.Worksheets(1).Range("C3:G7").Copy '+-- Tempel value ke range yang sama di sheet target. xlWS.Range("C3:G7").PasteSpecial xlPasteValues '+-- Pindahkan pointer ke sel A1. xlWS.Range("A1").Select '+-- Proteksi kembali sheet target. xlWS.Protect Password:="123", UserInterfaceOnly:=True '+-- Hapus referensi ke sheet aktif. Set xlWS = Nothing '+-- Tutup file target. xlWB.Close True End If End If Next errHandler: If Err Then MsgBox "Error getting validation list data!" Err.Clear: On Error GoTo 0 End If Application.ScreenUpdating = True End Sub
Silahkan disesuaikan dengan target aktualnya.
Demikian.