----- 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

Reply via email to