Kamis, 25 Agustus 2016

[belajar-excel] Digest Number 3947

Milis Belajar Microsoft Excel

6 Messages

Digest #3947

Messages

Wed Aug 24, 2016 3:18 am (PDT) . Posted by:

"Warsito Ito" warsitoito14

Selamat sore para master,Gimana Scrip untuk mengisi combobox dari data di listbox,dan apabila ada data yang sama di listbox yang tampil di combobox hanya satu tidak ada nama yang sama,combobox tersebut saya gunakan untuk filter data
Sebelumnya saya ucapkan terima kasih banyak,semoga para master dapat memberikan solusinya

Terima kasih

wasalam

Ito

Wed Aug 24, 2016 9:53 pm (PDT) . Posted by:

"marone oke" maroneoke940

Yth...master Kid
saya sudah coba mengikuti poin no 1...dan itu menghasilkan angka (warna merah) sesuai baris pada sheet REKAP AR, namun sy tidak paham dengan poin no 2 yaitu deklarasi variabel utk menyimpan cell J3 pada sheet ANUITAS, dan poin no 4 sheet rekap cells itu apa, apakah sy harus membuat sheet baru.. (sheet ada 2, antara lain sheet REKAP AR & ANUITAS).

demikian kendala saya, mohon maaf master sdh bikin repot....
wass


Pada Sabtu, 20 Agustus 2016 1:13, "'Mr. Kid' mr.nmkid@gmail.com [belajar-excel]" <belajar-excel@yahoogroups.com> menulis:


  Hai Marone,

Coba langkah berikut :
1. di sheet anuitas cells J3 diisi formula match :    (nomor baris Excel di lokasi penulisan data di sheet rekap)
        =IFERROR(MATCH(C1,'Rekap AR'!B:B,0)*ISNUMBER(H5),0)
2. deklarasikan variabel untuk menyimpan nilai J3 (hasil formula 1 tadi)
3. ambil nilai J3 tadi
4. tulis di sheet rekap cells dengan nomor baris yang disimpan variabel nomor 2 tadi, pada kolom J (kolom ke-10 karena kolom A adalah kolom ke-1)

Selamat mencoba

Regards,
Kid

2016-08-19 16:24 GMT+07:00 marone oke maroneoke940@yahoo.com [belajar-excel] <belajar-excel@yahoogroups.com>:

  Dear Master Excel...
mohon solusinya, gimana cara memindahkan data dari kolom H5 (sheet anuitas) ke kolom J (sheet rekap AR)
ke masing-masing NIK yang tersedia.. warna kuning...
misal : ketika dipilih nik : M0107010 => nama : ino sucipto, maka pada kolom H5 (sheet anuitas) sisa outstanding pokokakan pindah ke kolom J6 (sheet rekap AR) warna kuning,  begitu seterusnya...
kami mohon dengan sangat, karena datanya ada 2.000 anggota. (file terlampir)

| demikian, terima kasih bantuannya                               
|

#yiv2519666372 #yiv2519666372 -- #yiv2519666372ygrp-mkp {border:1px solid #d8d8d8;font-family:Arial;margin:10px 0;padding:0 10px;}#yiv2519666372 #yiv2519666372ygrp-mkp hr {border:1px solid #d8d8d8;}#yiv2519666372 #yiv2519666372ygrp-mkp #yiv2519666372hd {color:#628c2a;font-size:85%;font-weight:700;line-height:122%;margin:10px 0;}#yiv2519666372 #yiv2519666372ygrp-mkp #yiv2519666372ads {margin-bottom:10px;}#yiv2519666372 #yiv2519666372ygrp-mkp .yiv2519666372ad {padding:0 0;}#yiv2519666372 #yiv2519666372ygrp-mkp .yiv2519666372ad p {margin:0;}#yiv2519666372 #yiv2519666372ygrp-mkp .yiv2519666372ad a {color:#0000ff;text-decoration:none;}#yiv2519666372 #yiv2519666372ygrp-sponsor #yiv2519666372ygrp-lc {font-family:Arial;}#yiv2519666372 #yiv2519666372ygrp-sponsor #yiv2519666372ygrp-lc #yiv2519666372hd {margin:10px 0px;font-weight:700;font-size:78%;line-height:122%;}#yiv2519666372 #yiv2519666372ygrp-sponsor #yiv2519666372ygrp-lc .yiv2519666372ad {margin-bottom:10px;padding:0 0;}#yiv2519666372 #yiv2519666372actions {font-family:Verdana;font-size:11px;padding:10px 0;}#yiv2519666372 #yiv2519666372activity {background-color:#e0ecee;float:left;font-family:Verdana;font-size:10px;padding:10px;}#yiv2519666372 #yiv2519666372activity span {font-weight:700;}#yiv2519666372 #yiv2519666372activity span:first-child {text-transform:uppercase;}#yiv2519666372 #yiv2519666372activity span a {color:#5085b6;text-decoration:none;}#yiv2519666372 #yiv2519666372activity span span {color:#ff7900;}#yiv2519666372 #yiv2519666372activity span .yiv2519666372underline {text-decoration:underline;}#yiv2519666372 .yiv2519666372attach {clear:both;display:table;font-family:Arial;font-size:12px;padding:10px 0;width:400px;}#yiv2519666372 .yiv2519666372attach div a {text-decoration:none;}#yiv2519666372 .yiv2519666372attach img {border:none;padding-right:5px;}#yiv2519666372 .yiv2519666372attach label {display:block;margin-bottom:5px;}#yiv2519666372 .yiv2519666372attach label a {text-decoration:none;}#yiv2519666372 blockquote {margin:0 0 0 4px;}#yiv2519666372 .yiv2519666372bold {font-family:Arial;font-size:13px;font-weight:700;}#yiv2519666372 .yiv2519666372bold a {text-decoration:none;}#yiv2519666372 dd.yiv2519666372last p a {font-family:Verdana;font-weight:700;}#yiv2519666372 dd.yiv2519666372last p span {margin-right:10px;font-family:Verdana;font-weight:700;}#yiv2519666372 dd.yiv2519666372last p span.yiv2519666372yshortcuts {margin-right:0;}#yiv2519666372 div.yiv2519666372attach-table div div a {text-decoration:none;}#yiv2519666372 div.yiv2519666372attach-table {width:400px;}#yiv2519666372 div.yiv2519666372file-title a, #yiv2519666372 div.yiv2519666372file-title a:active, #yiv2519666372 div.yiv2519666372file-title a:hover, #yiv2519666372 div.yiv2519666372file-title a:visited {text-decoration:none;}#yiv2519666372 div.yiv2519666372photo-title a, #yiv2519666372 div.yiv2519666372photo-title a:active, #yiv2519666372 div.yiv2519666372photo-title a:hover, #yiv2519666372 div.yiv2519666372photo-title a:visited {text-decoration:none;}#yiv2519666372 div#yiv2519666372ygrp-mlmsg #yiv2519666372ygrp-msg p a span.yiv2519666372yshortcuts {font-family:Verdana;font-size:10px;font-weight:normal;}#yiv2519666372 .yiv2519666372green {color:#628c2a;}#yiv2519666372 .yiv2519666372MsoNormal {margin:0 0 0 0;}#yiv2519666372 o {font-size:0;}#yiv2519666372 #yiv2519666372photos div {float:left;width:72px;}#yiv2519666372 #yiv2519666372photos div div {border:1px solid #666666;min-height:62px;overflow:hidden;width:62px;}#yiv2519666372 #yiv2519666372photos div label {color:#666666;font-size:10px;overflow:hidden;text-align:center;white-space:nowrap;width:64px;}#yiv2519666372 #yiv2519666372reco-category {font-size:77%;}#yiv2519666372 #yiv2519666372reco-desc {font-size:77%;}#yiv2519666372 .yiv2519666372replbq {margin:4px;}#yiv2519666372 #yiv2519666372ygrp-actbar div a:first-child {margin-right:2px;padding-right:5px;}#yiv2519666372 #yiv2519666372ygrp-mlmsg {font-size:13px;font-family:Arial, helvetica, clean, sans-serif;}#yiv2519666372 #yiv2519666372ygrp-mlmsg table {font-size:inherit;font:100%;}#yiv2519666372 #yiv2519666372ygrp-mlmsg select, #yiv2519666372 input, #yiv2519666372 textarea {font:99% Arial, Helvetica, clean, sans-serif;}#yiv2519666372 #yiv2519666372ygrp-mlmsg pre, #yiv2519666372 code {font:115% monospace;}#yiv2519666372 #yiv2519666372ygrp-mlmsg * {line-height:1.22em;}#yiv2519666372 #yiv2519666372ygrp-mlmsg #yiv2519666372logo {padding-bottom:10px;}#yiv2519666372 #yiv2519666372ygrp-msg p a {font-family:Verdana;}#yiv2519666372 #yiv2519666372ygrp-msg p#yiv2519666372attach-count span {color:#1E66AE;font-weight:700;}#yiv2519666372 #yiv2519666372ygrp-reco #yiv2519666372reco-head {color:#ff7900;font-weight:700;}#yiv2519666372 #yiv2519666372ygrp-reco {margin-bottom:20px;padding:0px;}#yiv2519666372 #yiv2519666372ygrp-sponsor #yiv2519666372ov li a {font-size:130%;text-decoration:none;}#yiv2519666372 #yiv2519666372ygrp-sponsor #yiv2519666372ov li {font-size:77%;list-style-type:square;padding:6px 0;}#yiv2519666372 #yiv2519666372ygrp-sponsor #yiv2519666372ov ul {margin:0;padding:0 0 0 8px;}#yiv2519666372 #yiv2519666372ygrp-text {font-family:Georgia;}#yiv2519666372 #yiv2519666372ygrp-text p {margin:0 0 1em 0;}#yiv2519666372 #yiv2519666372ygrp-text tt {font-size:120%;}#yiv2519666372 #yiv2519666372ygrp-vital ul li:last-child {border-right:none !important;}#yiv2519666372

Wed Aug 24, 2016 10:31 pm (PDT) . Posted by:

"Mr. Kid" nmkid.family@ymail.com

Assalamu'alaikum wr wb

Hai Marone,

Tentang :

> poin no 2 yaitu deklarasi variabel utk menyimpan cell J3 pada sheet ANUITAS

>> Deklarasi variabel di VBA, dalam prosedur yang Anda gunakan untuk
menulis data yang di-entry user ke sheet rekap
>> Cara deklarasi variabel, lihat disini
<http://b-excel.blogspot.co.id/2013/07/belajarvba-004-tipe-data-variabel.html>
(it is VBA fundamentals)

poin no 4 sheet rekap cells itu apa, apakah sy harus membuat sheet baru..
> (sheet ada 2, antara lain sheet REKAP AR & ANUITAS).

>> kalimat lengkapnya :
4. tulis di sheet rekap cells dengan nomor baris yang disimpan
variabel nomor 2 tadi, pada kolom J (kolom ke-10 karena kolom A adalah
kolom ke-1)
>> diperbaiki menjadi :
4. tulis di sheet rekap*,* pada cells tertentu, yaitu cells dengan :
a. nomor baris Excel tertentu, yang nomor baris Excel tertentu
itu telah disimpan di dalam sebuah variabel, yaitu di variabel hasil usaha
Anda pada nomor 2 di atas tadi,
b. pada kolom J (yang berarti kolom ke-10 karena kolom A adalah
kolom ke-1)
>> Jadi, nomor 4 ini adalah alur proses yang kemudian Anda susun baris kode
VBA yang memenuhi kebutuhan alur proses tersebut

Wassalamu'alaikum wr wb
Kid

On Thu, Aug 25, 2016 at 10:42 AM, marone oke maroneoke940@yahoo.com
[belajar-excel] <belajar-excel@yahoogroups.com> wrote:

>
>
> Yth...master Kid
>
> saya sudah coba mengikuti poin no 1...dan itu menghasilkan angka (warna
> merah) sesuai baris pada sheet REKAP AR, namun sy tidak paham dengan poin
> no 2 yaitu deklarasi variabel utk menyimpan cell J3 pada sheet ANUITAS, dan
> poin no 4 sheet rekap cells itu apa, apakah sy harus membuat sheet baru..
> (sheet ada 2, antara lain sheet REKAP AR & ANUITAS).
>
> demikian kendala saya, mohon maaf master sdh bikin repot....
>
> wass
>
>
> Pada Sabtu, 20 Agustus 2016 1:13, "'Mr. Kid' mr.nmkid@gmail.com
> [belajar-excel]" <belajar-excel@yahoogroups.com> menulis:
>
>
>
> Hai Marone,
>
> Coba langkah berikut :
> 1. di sheet anuitas cells J3 diisi formula match : (nomor baris Excel
> di lokasi penulisan data di sheet rekap)
> =IFERROR(MATCH(C1,'Rekap AR'!B:B,0)*ISNUMBER(H5),0)
> 2. deklarasikan variabel untuk menyimpan nilai J3 (hasil formula 1 tadi)
> 3. ambil nilai J3 tadi
> 4. tulis di sheet rekap cells dengan nomor baris yang disimpan variabel
> nomor 2 tadi, pada kolom J (kolom ke-10 karena kolom A adalah kolom ke-1)
>
> Selamat mencoba
>
> Regards,
> Kid
>
>
>
>
>
>
> 2016-08-19 16:24 GMT+07:00 marone oke maroneoke940@yahoo.com
> [belajar-excel] <belajar-excel@yahoogroups.com>:
>
>
> Dear Master Excel...
>
> mohon solusinya, gimana cara memindahkan data dari kolom H5 (sheet
> anuitas) ke kolom J (sheet rekap AR)
> ke masing-masing NIK yang tersedia.. warna kuning...
>
> misal : ketika dipilih nik : M0107010 => nama : ino sucipto, maka pada
> kolom H5 (sheet anuitas) sisa outstanding pokok
> akan pindah ke kolom J6 (sheet rekap AR) warna kuning, begitu
> seterusnya...
>
> kami mohon dengan sangat, karena datanya ada 2.000 anggota. (file
> terlampir)
>
> demikian, terima kasih bantuannya
>
>
>
>
>
>

Wed Aug 24, 2016 9:54 pm (PDT) . Posted by:

"Heru Safrudin" heru.safrudin

Dear Mr. Kid

Apakah prosedur tersebut bisa dijalankan di excel versi dibawah 2010 ?

Mohon penjelasannya

Terima kasih

<ymsgr:sendIM?heru.safrudin> Heru SafrudinBISI,Heru Safrudin,YM online

From: 'Mr. Kid' mr.nmkid@gmail.com [belajar-excel] [mailto:belajar-excel@yahoogroups.com]
Sent: 23 Agustus 2016 12:50
To: BeExcel
Subject: [belajar-excel] Userform yang bisa di-resize karena menampilkan system menu

Dear BeExceller,

Tampilan userform di Excel biasanya seperti ini :

Tidak bisa di-minimize, maximize, atau di-resize sesukanya user.

Padahal sebenarnya userform bisa dibuat melakukan hal tersebut, seperti ini :



Caranya juga mudah...

Mau mencoba ?

Yuk dicoba...

Peringatan !!!
Buat yang pakai xl2010 ke atas (terutama yang pakai office 64 bit, baca sampai selesai dulu dan jangan buru-buru di-run ya...)

Tahap persiapannya begini :

1. buka Excel berisi workbook kosong (baru) -> save as dengan nama apa saja TAPI type-nya dipilih Macro Enabled (.xlsm atau .xlsb) [.xls juga bisa, tapi sebaiknya mulai pakai .xlsm atau .xlsb ya]

2. ke VBE (ALT F11) -> insert userform (menu Insert -> Userform) [Inilah userform yang akan dijadikan kelinci percobaan... perhatikan, nama userform masing-masing... misal namanya UserForm1]

[ketika sampai sini dan di run, akan muncul userform seperti gambar yang di atas sana... karena bukan targetnya, maka ndak usah di-run ya]

3. insert general module (menu Insert -> Module [BUKAN class module loh ya]) [inilah wadah baris kode pengubah userform]

4. save

dah... sampai disini, alatnya sudah siap... yang pokok adalah userform yang akan diubah-ubah dan sebuah general module wadah baris kode pengubah userform.

Cara menyusun pengubahnya begini :

0. Alur proses

a. userform dijalankan (di-run atau di-show gitulah) -> maka Windows akan menggambar si userform yang seperti gambar atas sana

b. saat windows sudah selesai menggambar dan mulai menginisialisasi (menyiapkan) seluruh perangkat userform -> lakukan proses pengubahan

*** [yang proses a adalah kegiatan menampilkan userform seperti biasa]

*** [yang proses b adalah proses event milik userform yang bernama initialize, jadi cukup atur 1 kali saja untuk dipakai selama si userform masih dipakai, jadi TIDAK keranjingan pakai event Activate]

1. Mengenal fungsi-fungsi mililk Windows (biasa disebut Windows API Function) yang akan digunakan (sila cari di MSDN atau bisa juga lihat di : http://allapi.mentalis.org/apilist/apilist.php )

a. FindWindow

> fungsi untuk mencari sebuah window berdasar jenis window-nya dan teks caption (judul) si window

> contoh kasus ini adalah di Excel dan window yang akan diproses adalah sebuah userform
> Excel userform berjenis 'ThunderDFrame' untuk xl2000 ke atas (kalau tanya kenapa, silakan tanya ke pembuat ms office kok milih nama itu untuk jenis windownya)

> judul si userform adalah isi properti bernama Caption

> hasil fungsi ini adalah nomor indeks window yang dikenal dengan handle window yang biasanya disimpan dalam variabel bernama hwnd

> baris deklarasi untuk FindWindow adalah :
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

b. GetWindowLong

> fungsi untuk mendapatkan nomor indeks elemen dari window yang akan diproses

> window yang akan diproses adalah hasil FindWindow

> elemen yang akan diproses adalah style-nya window yang memiliki jenis elemen bernilai -16 yang sering disimpan dalam suatu variabel konstanta bernama GWL_STYLE

*** nama variabel konstanta nya bisa Anda ubah-ubah sendiri (tapi nanti ngubahnya, kalau sudah mudeng)
*** detil tentang jenis-jenis elemen bisa dilihat di : https://msdn.microsoft.com/en-us/library/windows/desktop/ms633584(v=vs.85).aspx

*** sengaja nama variabelnya disamakan dengan yang dijelaskan di link tersebut

> hasil fungsi ini adalah nomor indeks elemen yang akan diproses yang dikenal dengan handle elemen window yang biasanya disimpan dalam variabel-variabel indeks seperti nIndex dan sebagainya

> baris deklarasi untuk GetWindowLong adalah :
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

c. SetWindowLong

> fungsi ini untuk menulis nilai properti elemen window yang baru, jadi kalau GetWindowLong mendapatkan elemen window, SetWindowLong menulis nilai baru ke elemen hasil GetWindowLong

> window yang akan diproses adalah hasil FindWindow

> elemen yang akan diproses adalah style-nya window yang memiliki jenis elemen bernilai -16 yang sering disimpan dalam suatu variabel konstanta bernama GWL_STYLE

> nilai elemen yang baru = nilai elemen yang lama (yang disimpan oleh hasil GetWindowLong) + atau - (setara OR atau OR NOT) nilai properti pengubah

> nilai-nilai properti untuk style window adalah seperti yang ada di link berikut : https://msdn.microsoft.com/en-us/library/windows/desktop/ms632600(v=vs.85).aspx

*** untuk kasus ini, yang dibutuhkan adalah nilai untuk : (pakai nama yang sama dengan link itu aja biar gampang mudeng)

a. kotak membesarkan window (baca : userform) : namanya WS_MAXIMIZEBOX yang bernilai (dalam Hex) &H10000

b. kotak mengecilkan window (baca : userform) : namanya WS_MINIMIZEBOX yang bernilai (dalam Hex) &H20000

c. kotak meresize window sesukanya, yang sejatinya adalah memasang border window (userform) dengan border yang bisa ditarik kesana kesini :
namanya WS_SIZEBOX atau WS_THICKFRAME bernilai (dalam Hex) &H40000 [pakai yang WS_SIZEBOX saja ya, biar sama-sama ada bunyi box-nya]

> karena proses menulis dan tidak perlu tahu hasilnya seperti apa (error atau tidak saat fungsi tersebut dijalankan), maka tidak perlu mempedulikan hasil dari fungsi ini, biarkan menguap dalam memori saja
> baris deklarasi untuk SetWindowLong adalah :
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

d. DrawMenuBar

> fungsi ini untuk me-redraw (menggambar ulang) menu bar si window (userform) [jadi bukan me-refresh ya, tapi menggambar ulang (yang lama dibuang lalu digambar lagi yang baru)]

> window yang akan diproses adalah hasil FindWindow

> karena proses gambar ulang dan tidak perlu tahu hasilnya seperti apa (error atau tidak saat fungsi tersebut dijalankan), maka tidak perlu mempedulikan hasil dari fungsi ini, biarkan menguap dalam memori saja
> baris deklarasi untuk DrawMenuBar adalah :
Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long

2. Urutan proses pengubahan properti window (userform)

> Jadi, setelah mengenal fungsi-fungsi yang dibutuhkan, maka bisa disusun sebuah alur proses (misal nanti diwujudkan sebagai sebuah prosedur kerja) untuk mengubah properti window :

1. dapatkan handle window dari object yang akan diproses (userform) dengan FindWindow

2. dapatkan handle elemen window tentang Style dari handle window yang diproses (userform) dengan GetWindowLong

3. menyusun nilai-nilai elemen yang baru, yaitu nilai elemen yang lama ditambah atau dikurang dengan nilai-nilai pengubah

4. menuliskan nilai elemen yang baru ke handle window yang diproses (userform) untuk elemen Style dengan SetWindowLong

5. menggambar ulang window (userform) dengan DrawMenuBar

3. Menentukan variabel-variabel kerja

> dari alur proses nomor 2, bisa diperkirakan variabel-variabel kerja yang dibutuhkan, seperti :

a. handle window yang diproses (userform) sebagai penyimpan hasil FindWindow : misal diberi nama lHWND yang bertipe Long

b. handle elemen window (elemen style, karena yang diubah adalah style window) sebagai penyimpan hasil GetWindowLong : misal diberi nama lELEMEN yang bertipe Long

c. wadah object window yang diproses (userform), sehingga userform yang akan diubah bisa mengirim dirinya ke proses pengubah tersebut : misal diberi nama objWIN yang bertipe Object

*** sapa tahu nanti mo dipakai untuk object lain yang serupa yang bukan UserForm, maka dipakailah tipe Object

4. Mendaftar variabel-variabel konstanta yang digunakan selama proses :

> dari catatan resmi di MSDN, nilai-nilai konstanta yang digunakan pada sepanjang proses ini adalah : (nama mengikuti MSDN saja)

a. GWL_STYLE bertipe Long diisi nilai -16 sebagai jenis elemen window

b. WS_MAXIMIZEBOX bertipe Long diisi nilai dalam Hex &H10000 sebagai properti kotak memperbesar window

c. WS_MINIMIZEBOX bertipe Long diisi nilai dalam Hex &H20000 sebagai properti kotak memperkecil window

d. WS_SIZEBOX bertipe Long diisi nilai dalam Hex &H40000 sebagai properti kotak pengubah ukuran window sesukanya

5. Menulis baris-baris kode prosesnya di sebuah general module (yang dibuat di tahap persiapan nomor 3)

> Tahap penulisannya adalah :

A. deklarasi fungsi-fungsi Windows yang akan digunakan (4 baris deklarasi untuk 4 fungsi yang dijabarkan di nomor 1)

> karena akan menggunakan fungsi-fungsi milik Window, maka diatur scope-nya adalah di level module saja alias private

> jadi, kalau user menulis formula di sebuah cells, nama-nama fungsi Windows-nya tidak menjadi salah satu opsi fungsi yang bisa digunakan oleh user di worksheet

> bunyi deklarasinya menjadi :

Private Declare blablabla

*** silakan dibuat ya... ( maunya copas aja ya... hadeeehh... ya wis lah ... sing waras ngalah... silakan kalau mau copas )



B. deklarasi variabel-variabel konstanta yang dibutuhkan sepanjang proses, dengan scope juga private saja (fungsinya private dan hanya dipakai module ini saja) : lihat nomor 4, ada 4 konstanta bertipe Long

> ditulis dibaris bawahnya baris deklarasi fungsi (poin A)

> cara penulisannya :

private const nama_konstanta AS datatype = nilainya

*** silakan dibuat ya... ( masih mau copas aja ya...baiklah )

private const GWL_STYLE as long = -16 'jenis elemen windows style
private const WS_MAXIMIZEBOX as long = &H10000 'kotak maximize
private const WS_MINIMIZEBOX as long = &H20000 'kotak minimize
private const WS_SIZEBOX as long = &H40000 'kotak resize

C. deklarasi variabel kerja (2 bijik sebagai wadah handle, yaitu handle window dan handle elemen

> ditulis dibawahnya baris deklarasi konstanta dengan scope private juga saja

> cara penulisannya :

private nama_Variabel AS datatype

*** silakan dibuat ya... ( copas lagi ya... hmmm )

private lHWND as long 'kalau di-upper, bunyinya LHWND (BUKAN pakai i besar, tapi pakai L kecil)

private lELEMEN as long

D. membuat prosedur yang bisa dipanggil oleh userform yang akan diubah-ubah, berisi proses pengubahannya

> misal bernama UbahCaptionUserform berjenis prosedur Sub dengan scope Public (bisa dipanggil dari mana saja) dan inputan berupa object window yang akan diproses bernama objWIN yang bertipe Object

> ditulis dibawahnya baris deklarasi variabel kerja (poin C)

Public sub UbahCaptionUserfor( objWIN as Object )

end sub

E. menulis baris proses setiap step-nya di dalam blok prosedur (poin D [dibaris kosong setelah Public blabla sampai sebelum End Sub])

> Step 1 : dapatkan handle window dari object yang akan diproses (userform) dengan FindWindow

lHWND = FindWindow( "ThunderDFrame" , objWin.caption )

> Step 2 : dapatkan handle elemen window tentang Style dari handle window yang diproses (userform) dengan GetWindowLong

lELEMEN = GetWindowLong( lHWND , GWL_STYLE )

> Step 3 : menyusun nilai-nilai elemen yang baru, yaitu nilai elemen yang lama ditambah atau dikurang dengan nilai-nilai pengubah
lELEMEN = lELEMEN + WS_MAXIMIZEBOX + WS_MINIMIZEBOX + WS_SIZEBOX

> Step 4 : menuliskan nilai elemen yang baru ke handle window yang diproses (userform) untuk elemen Style dengan SetWindowLong

SetWindowLong lHWND , GWL_STYLE , lELEMEN

> Step 5 : menggambar ulang window (userform) dengan DrawMenuBar

DrawMenuBar lHWND

> dah selesai....

6. Mengatur userform untuk menggunakan prosedur hasil nomor 5.D yang bernama UbahCaptionUserfor melalui event initialize milik si userform

> langkahnya sebagai berikut :

a. mengaktifkan object userform :
-> klik kanan object bernama UserForm1 (ingat, di atas sana dimisalkan namanya UserForm1) yang ada di Project Explorer (sisi kiri layar) -> pilih View Code

b. membuat event initialize milik userform1

-> diarea penulisan kode (lembar kosong sisi kanan project explorer) -> combobox sisi kiri : pilih UserForm -> combobox sisi kanan : pilih Initialize -> muncul blok prosedur event Initialize

c. isi blok proses event initialize yang baru saja terbentuk dengan baris kode pemanggil prosedur bernama disertai object userform yang akan diproses (misal akan memproses si userform1 [dirinya sendiri])
UbahCaptionUserfor UserForm1

d. save

*** Bagi Anda yang ingin membuat proses di atas bisa dijalankan di Office 64bit, sebaiknya terus melanjutkan ke nomor 7
*** Bagi Anda yang belum tahu cara menjalankan userform, silakan ke nomor 8

7. Membuat proses agar bisa dijalankan di office 64 bit

> baris-baris kode di atas adalah untuk VBA pada office 32 bit

> sejak xl2010, ada office 64bit, sehingga baris-baris kode yang merujuk ke suatu pointer (seperti indeks window alias hwnd) memerlukan datatype yang lebih sesuai

> lebih lengkapnya, silakan lhat di : https://msdn.microsoft.com/en-us/library/ee691831(office.14).aspx

> mulai xl2010, VBA yang digunakan disebut VB7 yang bisa bekerja di office 32bit maupun 64bit, tetapi datatype-nya disesuaikan agar support untuk 64bit walau sedang bekerja di 32bit.

> bagi xl2007 (yang semuanya 32 bit) ke bawah, hanya bisa menggunakan variabel untuk proses 32bit.

> sejak VB7, disediakan option bernama VB7 yang menunjukkan apakah VBA yang digunakan adalah versi xl2010 ke atas atau bukan.

> pemanfaatan option VBA7 adalah berupa blok option berikut :

#if vba7 then

'baris-baris kode untuk xl2010 ke atas yang membutuhkan 64bit variabel dan ptrsafe function yang bisa bekerja pada proses 32bit maupun 64bit

#else

'baris-baris kode untuk xl2007 ke bawah yang membutuhkan 32bit variabel yang hanya bisa bekerja pada proses 32bit

Tidak ada komentar:

Posting Komentar