Dear Harry,

1. Proteksi sheet :
Sheets("nama sheetnya").protect "passwordnya"       'protect
Sheets("nama sheetnya").unprotect "passwordnya"      'unprotect

Ketika akan olah sheet terproteksi, lakukan unprotect lebih dulu.
Usai mengolah sheet terproteksi, lakukan protect lagi.

2. Sebaiknya file database hanya berisi data saja. Seluruh form input
(interface input) seoerti pinjam, kembali, perpanjang, beli, bayar, dsb
diletakkan pada file terpisah, misal file Input. Untuk laporan (output)
seperti laporan bulanan, daftar peminjam yang telat pengembaliannya, dsb,
juga diletakkan di file terpisah, misal di file Output.
Untuk dapat memanfaatkan data di workbook database sheet database, maka
workbook database dibuka lebih dulu. Untuk keindahan, bisa saja workbook
database disembunyikan. Yang penting, jangan lupa untuk menutup file
database ketika usai menggunakannya.

Misal, sebuah form butuh data dari sheet database, maka saat init form,
lakukan buka file database. Bila perlu, sembunyikan file database. Ketika
form ditutup, pada event query close bisa dilakukan penutupan file database.

Contoh buka dan sembunyikan file :
'letakkan di bagian deklarasi variabel module
Public wbkApp as workbook, wbkDB as workbook

'contoh routine buka dan sembunyikan file excel
public sub BukaDanSembunyi()
     application.screenupdating=false
      set wbkapp=thisworkbook
      set wbkdb=workbooks.open "d:\data\database.xls"
      wbkapp.activate
      windows(wbkdb.name).visible=false
      application.screenupdating=true
end sub

'contoh tampilkan kembali yang dihide
public sub TampilkanLagiSiFile()
      windows(wbkdb.name).visible=true
end sub

'contoh tutup file
public sub TutupFileExcel()
      wbkdb.close false     'jika tidak mau disimpan pengubahan datanya
end sub

3. Sayangnya listing code yang disertakan tidak menampakkan penggunaan
sheet database.
Jika file database telah dibuka, mestinya seluruh kegiatan (non formula
links) yang membutuhkan data di sheet database pada file database tersebut
dapat dilakukan seperti :

'contoh init variabel sheet database di file database
dim shtDB as worksheet
set shtdb=wbkdb.sheets("database")

'contoh init variabel range di sheet database pada file database
dim rngDB as range
set rngdb=wbkdb.sheet("database").range("a1").currentregion

Wassalamualaikum Wr. Wb.
Kid.


2012/2/8 Harry <[email protected]>

> **
>
>
> Dear Mr, Kid,
>
>  Terima kasih atas informasi rumusnya.
> Setelah saya menuangkan rumus yang Bapak berikan, hasilnya ok. Tapi saya
> mengalami kendala / pertanyaan sebagai berikut:
>  1. Pada file "DATABASE"-nya (Sheet Database) apa bisa di protect...???
> 2. Apakah pada file "DATABASE" tersebut bisa kita buat user Form yang
> dapat di Link ke file "REGISTRASI" (Sheet ..........)...???
> 3. Pada program pinjam meminjam buku yang telah saya buat sebelumnya,
> misalnya untuk registrasi pengembalian buku yang telah dipinjam terdapat
> rumus sbb:
>
>  Private Sub UserForm_Initialize()
>    Dim i As Long, TbHeigh As Long, TbWidth
>
>    Set MemMaster = Sheets("Registrasi").Cells(1).CurrentRegion
>    TbHeigh = MemMaster.Rows.Count - 1
>    TbWidth = MemMaster.Columns.Count - 1
>    Set MemMaster = MemMaster.Offset(1, 0).Resize(TbHeigh, TbWidth)
>
>    Application.EnableEvents = False
>    With Cbonoregpinjam
>       .ColumnCount = 2
>       .BoundColumn = 1
>       For i = 1 To TbHeigh
>          .AddItem
>          .List(i - 1, 0) = MemMaster(i, 1)
>       Next i
>    End With
>    Application.EnableEvents = True
>    txttglkembali = Format(Date, "mm/dd/yyyy")
>    txtjamkembali = Format(Time, "h:mm")
>
>
> End Sub
>
> Private Sub Cbonoregpinjam_Change()
>    Dim r As Integer
>    If Cbonoregpinjam.ListIndex > -0 Then
>       r = Cbonoregpinjam.ListIndex + 1
>       If r > 0 Then
>          txtktp.Value = MemMaster(r, 2)
>          txtnama.Value = MemMaster(r, 3)
>
> Tapi saya selalu gagal dalam memunculkan User Form "BUKU KEMBALI".
> Pada program sebelumnya yang situasinya Sheet "DATABASE" menjadi satu
> kesatuan dalam i (satu) file, rimus tersebut diatas bisa digunakan. tapi
> setelah Sheet "DATABASE" saya pindahkan menjadi file yang berbada, mengapa
> rumus tersebut tidak dapat difungsikan.
>
> Masih terkait dengan pertanyaan No. 3, mohon berkenan informasi dan
> rumusnya...???
>
> Terima kasih atas berkenan informasi dan rumusnya.
>
>
> Regards,
>
>
> Harry
>
> N/B:
> Saya telah mencoba menggunakan rumus sbb:
> Private Sub UserForm_Initialize()
>
>   Dim wbkA As Workbook, wbkDB As Workbook
>   Set wbkA = ThisWorkbook
>   Set wbkDB = Workbooks.Open(wbkA.Path & "\database.xls")
>
> tapi yang menjadi kesalahan adalah:
> TbHeigh = MemMaster.Rows.Count - 1
> TbWidth = MemMaster.Columns.Count - 1
>   ------------------------------
> *Dari:* Kid Mr. <[email protected]>
> *Kepada:* [email protected]
> *Dikirim:* Minggu, 29 Januari 2012 22:31
> *Judul:* Re: [belajar-excel] SIMPAN DATA USER FORM PADA FILE YANG BEDA
>
>
> Dear Harry,
>
> *Pertanyaan No. 1*
> >> pada event click tombol Save, ubah baris kodenya menjadi :
> Private Sub cmdAdd_Click()
>    Dim iRow As Long, Reg As Range, oCtrl As Control
>
>     '----------------------------
>     'Kid : 2012-01-29 : modified
>     '----------------------------
>     'deklarasi variabel workbook
>     Dim wbkA As Workbook, wbkDB As Workbook
>
>     'init workbooknya
>     Set wbkA = ThisWorkbook
>     Set wbkDB = Workbooks.Open(wbkA.Path & "\database.xls")
>     wbkA.Activate
>
>     'init range database nya
>     Set Reg = wbkDB.Worksheets("DATABASE").Cells(1)
>     '----------------------------
>
>    'find first empty row in database
>    iRow = Reg(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
>
>
>    'copy the data to the database
>    Reg(iRow, 1).Value = txtNoreg.Value
>    Reg(iRow, 2).Value = txtNama.Value
>
>    'clear the data / modified by Haps / 30 Jul2011
>    txtNoreg.Value = ""
>    txtNama.Value = ""
>
>     '----------------------------
>     'Kid : 2012-01-29 : modified
>     '----------------------------
>    * 'tulis jumlah record database di registrasi cell a1**
>     wbkA.Sheets("registrasi").Range("a1").Formula =
> Reg.CurrentRegion.Rows.Count - 1*
>
>     'tutup database sekalian simpan
>     Application.DisplayAlerts = False
>     wbkDB.Close True
>     Application.DisplayAlerts = True
>     wbkA.Activate
>     '----------------------------
>
> Unload Me
> End Sub
>
> *Pertanyaan No. 2*
> Database yang baik tidak memiliki baris Sum atau Subtotal di baris ke
> sekiannya. Akan lebih baik lagi jika tidak ada formula didalamnya.
> Untuk hal ini, maka jumlah record database dapat disimpan pada sheet
> registrasi cell a1 yang berada di file interface (*lihat baris hijau pada
> no 1 di atas*)
> Karena jumlah record ada di sheet registrasi, maka text box txtJumlah pada
> form frmJumlah diubah nilai properti Control Source-nya menjadi merujuk ke
> cell A1 di sheet registrasi ( *=registrasi!a1* )
>
> Manfaatkan properti application.screenupdating = true sebelum proses
> dimulai dan application.screenupdating = false sebelum proses selesai untuk
> mengurangi efek blink saat buka workbook.
>
> Jika control source dari txtjumlah di kosongkan, maka buat prosedur event
> initialize form dan beri baris kode :
>     'deklarasi variabel workbook
>     Dim wbkA As Workbook, wbkDB As Workbook
>
>     Application.ScreenUpdating = False
>
>     'init workbooknya
>     Set wbkA = ThisWorkbook
>     Set wbkDB = Workbooks.Open(wbkA.Path & "\database.xls")
>     wbkA.Activate
>
>     'tulis jumlah record database di registrasi cell a1
>     txtjumlah.Text =
> wbkDB.Sheets("database").Range("a1").CurrentRegion.Rows.Count - 1
>
>     'tutup database sekalian simpan
>     Application.DisplayAlerts = False
>     wbkDB.Close True
>     Application.DisplayAlerts = True
>     wbkA.Activate
>
>     Application.ScreenUpdating = True
>
> Regards,
> Kid.
>
> 2012/1/29 Harry <[email protected]>
>
> **
>
>   Dear BeExceller,
>
> Mohon informasi dan penjelasan akan pertanyaan saya dengan situasi dan
> kondisi sebabagai berikut:
> Pertanyaan No. 1
> Jika pada File “STUDI KASUS (SIMPAN DATA USER FORM PADA FILE YANG BEDA)”
> terdapat 2 (dua) Sheet yaitu Sheet “REGISTRASI” dan Sheet “DATABASE”. Pada
> file tersebut, jika saya mengisi User Form pada Sheet “REGISTRASI” otomatis
> tersimpan pada Sheet “DATABASE”.
>
> Pertanyaan saya adalah:
> Bagaimana caranya jika Sheet “DATABASE” tersebut saya pindahkan pada File
> yang berbada Mis. File dng nama “DATABASE”.
>
>
> Pertanyaan No. 2
> Pada File “STUDI KASUS (SIMPAN DATA USER FORM PADA FILE YANG BEDA)” Sheet
> “DATABASE” kolom C15 merupakan penjumlahan dari C2 s/d C13. Jika User Form
> “JUMLAH” kita Click otomatis muncul hasil penjumlahannya. Tetapi jika
> databasenya bertambah, kok rumusnya hilang dan berganti dengan angka yang
> hasilnya tidak Up To Date (tidak sesuai dengan hasil yang diinginkan)…???
>
>
> Mohon berkenan informasinya.
>
> Regards,
>
>
> Harry
>
> N/B:
> ·                Data Sekarang: File “STUDI KASUS (SIMPAN DATA USER FORM
> PADA FILE YANG BEDA)” terdapat 2 (dua) Sheet yaitu Sheet “REGISTRASI” dan
> Sheet “DATABASE”.
> ·                Data yang seharusnya: File “STUDI KASUS (SIMPAN DATA
> USER FORM PADA FILE YANG BEDA)” hanya memiliki 1 (satu) Sheet yaitu Sheet
> “REGISTRASI” sedangkan Sheet “DATABASE” terdapat pada file yang berbeda
> yaitu File “DATABASE”
>
>
>
>
>   
>

Kirim email ke