----- Pesan Diteruskan ----
Dari: Arista Syahdana <syahd...@rocketmail.com>
Kepada: belajar-excel@yahoogroups.com
Terkirim: Rab, 17 Februari, 2010 16:10:04
Judul: Bls: Bls: [belajar-excel] form Pencarian
Mohon maaf sebelumnya. berhubung file kemarin terprotect maka kali ini saya
ingin memberikan password tsb. Pass=" nariyah "
Dan saya mohon untuk penjelasannya yang lebih mudah dipahami karena saya adalah
pemula. seperti letak code2 nya dan susunannya.
Atau bisa juga mengubah file yang saya kirim dengan memberi tanda pada kode
yang ditambahkan. Terima kasih
________________________________
Dari: Mr. Kid <mr.nm...@gmail.com>
Kepada: belajar-excel@yahoogroups.com
Terkirim: Sen, 15 Februari, 2010 22:44:35
Judul: Re: Bls: [belajar-excel] form Pencarian
Assalamualaikum Wr. Wb.
Yth. Bapak Syahdana
Berhubung file dari Bapak terproteksi dan kurang santun jika dibongkar
sandinya, maka saya coba memberi solusi berdasar alur program. Andai
diperbolehkan, mungkin salinan kode atau file yang tak terproteksi VBA
Project-nya bisa dilampirkan ulang.
>> Tentang Tanggal di semua form
Berdasar alur program, pada Menu Utama terdapat banyak cabang. Penentuan
tanggal dilakukan di menu utama.
=> Tanggal untuk operasi pada form memanfaatkan worksheet
Jika form yang dituju memanfaatkan worksheet, maka salin tanggal tersebut ke
sebuah cell pada worksheet.
Pada sebuah cell di worksheet tujuan, bisa tulis tanggal di menu utama tersebut.
Misal : sheet yang dituju adalah sheet 'pemasukan'.
cell yang dijadikan temporary adalah cell A4.
Maka pada menu utama, ketika (event) tombol pemasukan ditekan
Sheets("pemasukan").range("a4").value = _
dateserial( cInt(txtTahun. text), cInt(txtBulan. text),
cInt(txtTanggal. text) )
=> Tanggal untuk operasi pada form menggunakan user form GUI
Jika form yang dituju adalah user form, maka bisa memanfaatkan sebuah variable
ber-scope public (diletakkan pada modules). Setiap user form baru tampil
(Show), set bagian event activate atau pada event init-nya untuk menampilkan
tanggal berdasar variable tersebut.
Tanggal disusun oleh Bapak debagai 3 part, yaitu tanggal, bulan, dan tahun.
Pada form yang ditampilkan oleh sebuah worksheet (misal Iuran Kendaraan >>
Tambah), juga tampil sebagai 3 part. Maka lebih mudah jika ada 3 variable
dengan scope public, yang dibaca oleh setiap form ketika tampil.
Andai tanggal pada form Tambah tersebut diijinkan untuk diubah nilainya
(locked=False) , dan ingin tanggal di Menu Utama nanti juga mengikutinya, maka
ubah nilai variable karena ada pengubahan nilai oleh user di form Tambah
tersebut.
Deklarasi variable ber-scope public diletakkan pada sebuah modules. (digunakan
type data Long, karena asumsinya system operasi yang digunakan masih
menggunakan Windows 32 bit)
Public lTgl as Long
Public lBln as Long
Public lThn as Long
>> tentang ComboBox berdasar input di sebuah textbox
Jika nama barang telah dikelompokkan dalam range-range 1 kolom (1 kolom per
jenis barang), maka memberi nama range per jenisnya, maka set pada combobox
bisa dilakukan dengan mengubah property rowsource, sedangkan filter jenis
barang berdasar combobox lain yang berisi jenis-jenis barang.
Jika range nama barang adalah sebuah data 1 kolom (seluruh barang), maka bisa
dilakukan loop pada range tersebut. Misal pada textbox yang menjadi filter
diisi 'fre', dan range nama-nama barang telah ada :
dim rngBrg as range
dim rngTemp as range
set rngBrg = sheets("referensi").range("D2:D51")
cboComboku.clear
for each rngTemp in rngBrg
if instr(1, rngTemp.value, txtFilter.text, vbtextcompare) <> 0 then
cboComboku.additem rngtemp.value
end if
next
>> tentang cari nama Anggota
Umumnya, menggunakan loop juga, terhadap range nama (kolom C).
Saya lebih suka memanfaatkan fitur AutoFilter.
Pertama : Untuk asumsi sekedar pencarian dan penampilan di sheet Anggota secara
langsung, ketika tombol cari ditekan dan memasukkan sebuah text.
dim rng as range
Sheets("Anggota").Autofiltermode= false
'tanpa header karena ada baris kosong setelah header
'jika tidak ada baris kosong setelah header, maka header akan ikut terblok
set rng = sheets("Anggota").range("b18").currentregion
'karena ada baris kosong tersebut, maka perlu definisi ulang isi object rng
'yaitu naik 1 baris (disini yang didapat adalah baris kosong tersebut) dengan
offset(-1)
'kemudian perluas area dengan +1 dari jumlah baris yang didapat set rng pertama
'bagian ini tidak perlu jika header dan data tidak terpisah baris kosong
set rng = rng.offset(- 1).resize( rng.rows. count+1)
'proses filter
'penggunaan wildcard character * setara dengan bahasa contain (ada)
rng.autofilter field:=2, criteria1:="=*" & txtKriteria. text & "*"
'----
kode di atas adalah kode dasar autofilter.
hasil filter bisa diolah lebih lanjut.
misal :
1. adakah data hasil filter ?
if rng.specialcells( xlcelltypevisibl e).rows.count >1 then '>1 karena 1
adalah header
'kode jika ada data hasil filter
end if
2. ada lebih dari 1 baris data hasil ?
'>2 karena 1 adalah header, 1 lagi adalah baris data
if rng.specialcells( xlcelltypevisibl e).rows.count >2 then
'kode jika ada data hasil filter
end if
3. copy hasil filter
rng.specialcells( xlcelltypevisibl e).copy
4. hapus seluruh baris hasil filter
rng.specialcells( xlcelltypevisibl e).entirerow. delete
5. hapus hasil filter untuk kolom data saja, dan shift up
rng.specialcells( xlcelltypevisibl e).entirerow. delete xlshiftup
6. filter lagi dengan kriteria filed alamat dari textbox input untuk alamat
'kolom alamat adalah kolom 3 dari yang diblok dalam object rng
rng.autofilter field:=3, criteria1:="=*" & txtAlamat.text & "*"
7. filter lagi hanya untuk yang punya no telp
rng.autofilter field:=4, criteria1:="<>"
8. lepas filter oleh alamat (jadi tinggal yang di-filter oleh nama dan yang
punya no telp)
rng.autofilter field:=3
9. tampilkan kembali semua
sheets("Anggota").autofiltermode= false
atau
sheets("Anggota").showalldata
Kedua : dengan asumsi, sekedar ingin tahu ada berapa yang sesuai dengan kriteria
dim rng as range
dim lData as long
Sheets("Anggota").Autofiltermode= false
'tanpa header karena ada baris kosong setelah header
'jika tidak ada baris kosong setelah header, maka header akan ikut terblok
set rng = sheets("Anggota").range("b18").currentregion. offset(0, 1).resize(
columnsize: =1)
'karena ada baris kosong tersebut, maka perlu definisi ulang isi object rng
'yaitu naik 1 baris (disini yang didapat adalah baris kosong tersebut) dengan
offset(-1)
'kemudian perluas area dengan +1 dari jumlah baris yang didapat set rng pertama
'bagian ini tidak perlu jika header dan data tidak terpisah baris kosong
set rng = rng.offset(- 1).resize( rng.rows. count+1)
'kode ini hanya menghasilkan bilangan >=0
'error jika object rng tidak ada isinya
'tidak dapat mengkalkulasi range yang memiliki banyak area (misal karena telah
terfilter)
ldata = worksheetfunction( rng, "*" & txtKriteria. text & "*")
dari kode di atas, barulah diadakan proses selanjutnya, misal :
1. Ada berapakah hasil yang sesuai ?
jawabnya adalah sejumlah nilai dalam variabel lData
2. lebih dari 1 kah ?
if lData > 1 then
'kode karena lebih dari 1 data yang sesuai
end if
3. ambil data pertama yang sesuai, dan tampilkan (misal dalam msgbox)
'penggunaan cek terhadap lData hasil countif() akan menghindarkan dari error
oleh
'proses fungsi match()
if lData <> 0 then
lData = worksheetfunction. match("*" & txtkriteria. text & "*", rng,0)
msgbox rng.cells(ldata)
end if
property row akan menghasilkan baris excel-nya
contoh :
ldata=rng.cells( ldata).row
maka ldata akan berisi nomor baris dari nama pertama yang ditemukan memiliki
kesesuaian
selain penggunaan cells([rowindex] ,[columnindex] ), juga bisa digunakan offset
dan resize
contoh :
msgbox rng.offset(ldata- 1).resize( rowsize:= 1)
yang hasilnya sama dengan :
msgbox rng.cells(ldata)
Semoga bermanfaat.
Wa Alaikumsalam Wr. Wb.
Kid.
2010/2/15 Arista Syahdana <syahd...@rocketmail .com>
>
>
>
>
>
>
>
>
>
>
>
>
>
> >
>
>>
>
>>
>
>Maaf klo dalam menerangkan kasus saya kurang jelas. berikut penjelasan yang
>lebih kompleks :
>1. saya membuat file excel dengan lebih dari 10 sheet. masing2 sheet berisi
>data penjualan barang yang berbeda jenis sehingga saya harus membuat form
>pembelian dan penjualan untuk setiap barang. Nah saya ingin mebuat form yang
>lebih ringkas. Misalnay saya mengetikkan kata : fre di textbox dan menekan
>enter maka secara otomatis di combobox akan muncul:
>>
> fren 5
> fren10
> fren 25
> fren 50
> fren 100
>dan ketika saya memilih salah satu dari hasil maka form tersebut akan merujuk
>pada tabel barang yang saya klik
>
>2. saya mempunyai 1 form utama yang fungsinya untuk merujuk pada sheet
>tertentu. dan pead sheet tersebut ada form lain
> yang berfungsi untuk memasukkan data ke dalam sheet tersebut. Yang saya
> tanyakan apabila saya mengubah tanggal pada form utama maka semua form yang
> ada pada setiap sheet otomatis ikut berubah sesuai dengan form utama ketika
> di aktifkan.
>>
>Berikut saya lampirkan file contoh. mohon diperiksa pada tanggal setiap form,
>dan cara mencari nama anggota pada sheet ANGGOTA
>
>Demikian penjelasan kasus yang saya alami. dan sebelumnya saya ucapkan terima
>kasih.
>
>
>
>
>
________________________________
>Dari: Mr. Kid <mr.nm...@gmail. com>
>Kepada: belajar-excel@ yahoogroups. com
>Terkirim: Sab, 13 Februari, 2010 20:46:47
>Judul: Re: [belajar-excel] form Pencarian
>
> >
>
>
>>
>
>Dear Syahdana,
>
>1.
>Object ComboBox memiliki kemampuan untuk autocomplete, sedangkan textbox tidak
>memilikinya secara default.
>Jika makna kata sebagian adalah dimana saja dalam nilai (awal, tengah, akhir),
>maka perlu kode program untuk mencari posisi yang dicari dalam sebuah list.
>>
>
>
>Jika list tersebut dari suatu range di excel sheet, maka selain dengan loop,
>bisa digunakan dengan evaluate berisi formula array Match() dengan array
>CountIF() -- kebanyakan suka dengan loop memakai fungsi InStr bawaan VB.
>
>Contoh kasus mungkin bisa dilampirkan, agar rekan yang bersedia memberi contoh
>kode programnya tidak sebel harus buat dummy datanya -- hehehe jadi penyediaan
>dummy data adalah sebagian fasilitas yang harus disediakan (istilah agak
>kasarnya -- modal dikit gitu).
>
>2.
>Yang ini lebih butuh lagi contoh kasusnya, karena sangat customize. Seperti
>apakah wujud form-form tersebut. Kenapa ada banyak form ? Mungkinkah
>menggunakaan MultiPage, TabStrip, atau gabungan MultiPage dan TabStrip ? Kalau
>memang tidak bisa, berarti ada banyak form beneran.
>
>
>Kid.
>
>
>2010/2/13 syahd...@rocketmail .com <syahd...@rocketmail .com>
>
>>
>>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> >>
>>
>>>>
>>
>>>>
>>
>>1. Maaf mbak Ni numpang tanya. Gimana ya caranya membuat form untuk mencari
>>data anggota atau barang dengan textbox? Dan jika Kita memasukkan sebagian
>>maka akan tampak pilihan di combobox atau text box yang lain.
>>>>
>>
>>
>>
>>2. Trus bagaimana caranya agar combobox dapat menampilkan tanggal di lebih
>>dari 1 form dan jika mengubah salah satunya maka semua combobox di form lain
>>ikut berubah?
>>
>>
>
>________________________________
Mencari semua teman di Yahoo! Messenger?
>Undang teman dari Hotmail, Gmail ke Yahoo! Messenger dengan mudah sekarang!
>>
________________________________
Lebih Bersih, Lebih Baik, Lebih Cepat - Rasakan Yahoo! Mail baru yang Lebih
Cepat hari ini!
Yahoo! Mail Kini Lebih Cepat dan Lebih Bersih. Rasakan bedanya sekarang!
http://id.mail.yahoo.com