[belajar-excel] Message box Ok Cancel

classic Classic list List threaded Threaded
17 messages Options
Reply | Threaded
Open this post in threaded view
|

[belajar-excel] Message box Ok Cancel

yusajing_ehm
Salam Para Master excel,

Saya sedang membuat suatu coding dengan vba macro, tetapi saya kesulitan dalam membuat messagebox yang menggunakan Ok cancel,,

Kondisi yang saya inginkan adalah ketika muncul message box dan keluar pilihan "OK" atau "Cancel" akan keluar suatu process jika memilih salah satu.

Misal dalam kasus ini adalah :
Jika saya memilih "Ok" maka akan keluar kalimat "Good Job" di B1,

Untuk lebih jelasnya saya lampirkan filenya,,

terimakasih
Ridwan

MessageBox.xls (42K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: [belajar-excel] Message box Ok Cancel

hendrik karnadi
Coba yang ini, apakah sudah sesuai harapan.

Salam,
Hendrik Karnadi


________________________________
 From: Kurei recca <[hidden email]>
To: Belajar Excel Grups <[hidden email]>
Sent: Wednesday, 21 March 2012, 10:51
Subject: [belajar-excel] Message box Ok Cancel
 

 
Salam Para Master excel,

Saya sedang membuat suatu coding dengan vba macro, tetapi saya kesulitan dalam membuat messagebox yang menggunakan Ok cancel,,

Kondisi yang saya inginkan adalah ketika muncul message box dan keluar pilihan "OK" atau "Cancel" akan keluar suatu process jika memilih salah satu.

Misal dalam kasus ini adalah :
Jika saya memilih "Ok" maka akan keluar kalimat "Good Job" di B1,

Untuk lebih jelasnya saya lampirkan filenya,,

terimakasih
Ridwan
 

MessageBox.xls (44K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: [belajar-excel] Message box Ok Cancel

Rr Wilis
Mohon maaf, hanya ingin menambah setitik dari makro pak Karnadi yg sudah
oke..

Kita akan lebih baik membiasakan hal-hal kecil sejak menghadapi kasus-kasus
kecil
misalnya menuliskan DEKLARASI Variable, sebelum variable digunakan.
Hal ini sangat berpengaruh terhadap kecepatan program, terutama akan sangat
terasa
kelak jika kita membuat proyek2 besar

Variable Jawab,  sebelum digunakan dapat dideklarasikan sbb

Private Sub Worksheet_Change(ByVal Target As Range)
   *Dim Jawab As Long * ' atau jika tak tahu type nya
  'Dim Jawab          ' ( as Variant)
   If Target = Cells(1) Then
      If Target <> vbNullString Then
         Jawab = MsgBox("Pilih Ok atau Cancel ??", *vbOKCancel*, "Pilih
Salah satu !!")
         If Jawab = vbOK Then
            Target(1, 2).Value = "Good Job"
         Else
            Target(1, 2).Value = vbNullString
         End If
      End If
   End If
End Sub
'---------
MsgBox Return Values
  Constant Value Description *vbOK* 1 *OK* button pressed *vbCancel* 2 *
Cancel* button pressed *vbAbort* 3 *Abort* button pressed *vbRetry* 4 *Retry
* button pressed *vbIgnore* 5 *Ignore* button pressed *vbYes* 6
*Yes*button pressed
*vbNo* 7 *No* button pressed

CMIIW


On Wed, Mar 21, 2012 at 11:37 AM, hendrik karnadi
<[hidden email]>wrote:

> **
> Coba yang ini, apakah sudah sesuai harapan.
> Salam,
> Hendrik Karnadi
>
>
*________________________________
From: Kurei recca <[hidden email]>
Sent: Wednesday, 21 March 2012, 10:51
Salam Para Master excel,
Saya sedang membuat suatu coding dengan vba macro, tetapi saya kesulitan
dalam membuat messagebox yang menggunakan Ok cancel,,
Kondisi yang saya inginkan adalah ketika muncul message box dan keluar
pilihan "OK" atau "Cancel" akan keluar suatu process jika memilih salah
satu.
Misal dalam kasus ini adalah :
Jika saya memilih "Ok" maka akan keluar kalimat "Good Job" di B1,
Untuk lebih jelasnya saya lampirkan filenya,,
terimakasih
Ridwan*
Reply | Threaded
Open this post in threaded view
|

Re: [belajar-excel] Message box Ok Cancel

hendrik karnadi
Terima kasih atas koreksinya.

Bahkan kalau mau lebih disiplin lagi (sesuai petunjuk Bu Siti Vi) pakai Option Explicit di atas Private Sub ...,
sehingga jika ada Variable yang belum dideklarasikan akan tampak pesan "Compile Error, Variable Not Defined"

Salam,
Hendrik Karnadi



________________________________
 From: Rara Wilis <[hidden email]>
To: [hidden email]
Sent: Wednesday, 21 March 2012, 12:00
Subject: Re: [belajar-excel] Message box Ok Cancel
 

 
Mohon maaf, hanya ingin menambah setitik dari makro pak Karnadi yg sudah oke..

Kita akan lebih baik membiasakan hal-hal kecil sejak menghadapi kasus-kasus kecil
misalnya menuliskan DEKLARASI Variable, sebelum variable digunakan.
Hal ini sangat berpengaruh terhadap kecepatan program, terutama akan sangat terasa
kelak jika kita membuat proyek2 besar

Variable Jawab,  sebelum digunakan dapat dideklarasikan sbb

Private Sub Worksheet_Change(ByVal Target As Range)
   Dim Jawab As Long  ' atau jika tak tahu type nya
  'Dim Jawab         ' ( as Variant)
   If Target = Cells(1) Then
      If Target <> vbNullString Then
         Jawab = MsgBox("Pilih Ok atau Cancel ??", vbOKCancel, "Pilih Salah satu !!")
         If Jawab = vbOK Then
            Target(1, 2).Value = "Good Job"
         Else
            Target(1, 2).Value = vbNullString
         End If
      End If
   End If
End Sub
'---------
MsgBox Return Values
Constant
Value
Description
vbOK 1 OK button pressed
vbCancel 2 Cancel button pressed
vbAbort 3 Abort button pressed
vbRetry 4 Retry button pressed
vbIgnore 5 Ignore button pressed
vbYes 6 Yes button pressed
vbNo 7 No button pressed

CMIIW


On Wed, Mar 21, 2012 at 11:37 AM, hendrik karnadi <[hidden email]> wrote:

 
>Coba yang ini, apakah sudah sesuai harapan.
>Salam,
>Hendrik Karnadi
>
>
 ________________________________
From: Kurei recca <[hidden email]>
Sent: Wednesday, 21 March 2012, 10:51 
Salam Para Master excel,
Saya sedang membuat suatu coding dengan vba macro, tetapi saya kesulitan dalam membuat messagebox yang menggunakan Ok cancel,,
Kondisi yang saya inginkan adalah ketika muncul message box dan keluar pilihan "OK" atau "Cancel" akan keluar suatu process jika memilih salah satu.
Misal dalam kasus ini adalah :
Jika saya memilih "Ok" maka akan keluar kalimat "Good Job" di B1,
Untuk lebih jelasnya saya lampirkan filenya,,
terimakasih
Ridwan
 
vw
Reply | Threaded
Open this post in threaded view
|

Re: [belajar-excel] Message box Ok Cancel

vw
In reply to this post by Rr Wilis
mba Rara,
mau tanya dong untuk yang dicomment mba rara dibawah.

mengenai deklarasi variabel seperti dibawah ;

kenapa As Long ? koq ga As Boolean, String atau yg lain?
dari sample select case ki semprul kemarin kalau Boolean kondisi nya hanya 2, true dan false.
bagaimana dengan deklarasi Double?
apakah perlu semua variabel di deklarasikan?
apakah ada bedanya kalau semua -karena saya kurang paham mengenai ini-, saya beri saja semua deklarasi menjadi As Variant?
saat ini kebetulan saya sedang membuat macro, dan kebetulan tanpa ada deklarasi, jalan sih jalan, tapi mba rara bilang deklarasi variabel bisa membuat lebih cepat lagi proses nya. kalau berkenan mohon berbagi ilmunya.
terima kasih sebelumnya.

salam
vega

------- Original message -------

> From: Rara Wilis <[hidden email]>
> To: [hidden email]
> Sent: 21.3.,  12:00
>
>  
>
> Mohon maaf, hanya ingin menambah setitik dari makro pak Karnadi yg sudah oke..
>
> Kita akan lebih baik membiasakan hal-hal kecil sejak menghadapi kasus-kasus kecil
> misalnya menuliskan DEKLARASI Variable, sebelum variable digunakan.
> Hal ini sangat berpengaruh terhadap kecepatan program, terutama akan sangat terasa
> kelak jika kita membuat proyek2 besar
>
> Variable Jawab,  sebelum digunakan dapat dideklarasikan sbb
>
> Private Sub Worksheet_Change(ByVal Target As Range)
>    Dim Jawab As Long  ' atau jika tak tahu type nya
>   'Dim Jawab          ' ( as Variant)
>    If Target = Cells(1) Then
>       If Target <> vbNullString Then
>          Jawab = MsgBox("Pilih Ok atau Cancel ??", vbOKCancel, "Pilih Salah satu !!")
>          If Jawab = vbOK Then
>             Target(1, 2).Value = "Good Job"
>          Else
>             Target(1, 2).Value = vbNullString
>          End If
>       End If
>    End If
> End Sub
> '---------
> MsgBox Return Values
> Constant Value Description
> vbOK 1 OK button pressed
> vbCancel 2 Cancel button pressed
> vbAbort 3 Abort button pressed
> vbRetry 4 Retry button pressed
> vbIgnore 5 Ignore button pressed
> vbYes 6 Yes button pressed
> vbNo 7 No button pressed
>
> CMIIW
>
>
> On Wed, Mar 21, 2012 at 11:37 AM, hendrik karnadi <[hidden email]> wrote:
>> Coba yang ini, apakah sudah sesuai harapan.
>> Salam,
>> Hendrik Karnadi
>>
>  
> ________________________________
> From: Kurei recca <[hidden email]>
> Sent: Wednesday, 21 March 2012, 10:51 
> Salam Para Master excel,
> Saya sedang membuat suatu coding dengan vba macro, tetapi saya kesulitan dalam membuat messagebox yang menggunakan Ok cancel,,
> Kondisi yang saya inginkan adalah ketika muncul message box dan keluar pilihan "OK" atau "Cancel" akan keluar suatu process jika memilih salah satu.
> Misal dalam kasus ini adalah :
> Jika saya memilih "Ok" maka akan keluar kalimat "Good Job" di B1,
> Untuk lebih jelasnya saya lampirkan filenya,,
> terimakasih
> Ridwan
>

Kid
Reply | Threaded
Open this post in threaded view
|

Re: [belajar-excel] Message box Ok Cancel

Kid
Administrator
Boleh ikutan ngobrol ya...

1. kenapa As Long ? koq ga As Boolean, String atau yg lain? dari sample
select case ki semprul kemarin kalau Boolean kondisi nya hanya 2, true dan
false.
bagaimana dengan deklarasi Double?
>> Pemilihan tipe data saat mendeklarasikan variabel, tergantung pada nilai
yang akan diisikan ke variabel tersebut.
Misal, dalam sebuah proses untuk mengkalkulasi sesuatu, dibutuhkan 7
variabel,
yaitu x1 dan x2 untuk simpan angka bilangan bulat maka bisa menggunakan
tipe Long atau Integer yang cenderung dipilih berdasar range nilai data
yang akan disimpan, karena Integer memiliki range nilai yang dapat disimpan
yang lebih sempit dibanding Long.
Deklarasinya :
dim x1 as long, x2 as long
bukan dim x1,x2 as long

y3 dan y4 menyimpan status TRUE / FALSE maka memilih tipe data Boolean
dim y3 as boolean, y4 as boolean

z5 berisi nilai persentase sesuatu yang ada angka dibelakang komanya, maka
dipilih single atau double
dim z5 as double

pesan6 menyimpan teks pesan maka dipilih string
dim pesan6 as string

rngData menyimpan object range data yang akan diproses maka menggunakan
tipe object range
dim rngdata as range

2. apakah perlu semua variabel di deklarasikan?
>> Pendeklarasian seluruh variabel adalah sesuatu yang dianjurkan, meski
bukan berarti kalau tidak dideklarasikan terus ndak bisa.
Ketika baris pertama module bertuliskan Option Explicit, maka
pendeklarasian variabel harus dilakukan. Jika tidak ada, maka variabel yang
tidak dideklarasikan akan bertipe Variant.

3. apakah ada bedanya kalau semua -karena saya kurang paham mengenai ini-,
saya beri saja semua deklarasi menjadi As Variant?
>> Tipe data variant adalah tipe data yang bisa berisi apa saja. Karena
harus bisa berisi apa saja, maka disediakanlah ruang memori yang luas untuk
variabel bertipe data ini. Tentu hal ini akan membutuhkan ruang memori yang
besar. Kadang ngelesnya para pemakai variant adalah 'punya memori luas
banget kok'
nah untuk hal ini, coba dibayangkan begini saja....
Kalau akan bepergian dan harus bawa oleh-oleh, misal ada 7 oleh-oleh
seperti di atas sana, apakah akan dipilih kopor yang paling besar untuk
setiap oleh-oleh ?
Padahal ada oleh-oleh yang bisa diwadahi dalam sebuah kantong plastik 1/4
KG ada yang kresek kecil, ada yang kresek besar, ada juga yang muat
dimasukkan ke kardus tart ukuran 30 x 30 cm.

4. saat ini kebetulan saya sedang membuat macro, dan kebetulan tanpa ada
deklarasi, jalan sih jalan, tapi mba rara bilang deklarasi variabel bisa
membuat lebih cepat
>> sekarang, semua variabel sudah dideklarasikan.
bayangkan lagi, komputer bagaikan seorang kuli angkut. Kalau si kuli tadi
diminta membawa semua barang bawaan, kira-kira akan cepat mana ya antara
dua keadaan di atas ? Harus membawa oleh-oleh yang diwadahi dalam 7 kopor
besar ataukah membawa oleh-oleh yang wadahnya disesuaikan dengan ukuran
isinya ?

Wassalam,
Kid.

On Sat, Mar 24, 2012 at 14:30, <[hidden email]> wrote:

> **
>
>
> mba Rara,
> mau tanya dong untuk yang dicomment mba rara dibawah.
>
> mengenai deklarasi variabel seperti dibawah ;
>
> kenapa As Long ? koq ga As Boolean, String atau yg lain?
> dari sample select case ki semprul kemarin kalau Boolean kondisi nya hanya
> 2, true dan false.
> bagaimana dengan deklarasi Double?
> apakah perlu semua variabel di deklarasikan?
> apakah ada bedanya kalau semua -karena saya kurang paham mengenai ini-,
> saya beri saja semua deklarasi menjadi As Variant?
> saat ini kebetulan saya sedang membuat macro, dan kebetulan tanpa ada
> deklarasi, jalan sih jalan, tapi mba rara bilang deklarasi variabel bisa
> membuat lebih cepat lagi proses nya. kalau berkenan mohon berbagi ilmunya.
> terima kasih sebelumnya.
>
> salam
> vega
>
>
> ------- Original message -------
> > From: Rara Wilis <[hidden email]>
> > To: [hidden email]
> > Sent: 21.3., 12:00
> >
> >
> >
> > Mohon maaf, hanya ingin menambah setitik dari makro pak Karnadi yg sudah
> oke..
> >
> > Kita akan lebih baik membiasakan hal-hal kecil sejak menghadapi
> kasus-kasus kecil
> > misalnya menuliskan DEKLARASI Variable, sebelum variable digunakan.
> > Hal ini sangat berpengaruh terhadap kecepatan program, terutama akan
> sangat terasa
> > kelak jika kita membuat proyek2 besar
> >
> > Variable Jawab,  sebelum digunakan dapat dideklarasikan sbb
> >
> > Private Sub Worksheet_Change(ByVal Target As Range)
> >    Dim Jawab As Long  ' atau jika tak tahu type nya
> >   'Dim Jawab          ' ( as Variant)
> >    If Target = Cells(1) Then
> >       If Target <> vbNullString Then
> >          Jawab = MsgBox("Pilih Ok atau Cancel ??", vbOKCancel, "Pilih
> Salah satu !!")
> >          If Jawab = vbOK Then
> >             Target(1, 2).Value = "Good Job"
> >          Else
> >             Target(1, 2).Value = vbNullString
> >          End If
> >       End If
> >    End If
> > End Sub
> > '---------
> > MsgBox Return Values
> > Constant Value Description
> > vbOK 1 OK button pressed
> > vbCancel 2 Cancel button pressed
> > vbAbort 3 Abort button pressed
> > vbRetry 4 Retry button pressed
> > vbIgnore 5 Ignore button pressed
> > vbYes 6 Yes button pressed
> > vbNo 7 No button pressed
> >
> > CMIIW
> >
> >
> > On Wed, Mar 21, 2012 at 11:37 AM, hendrik karnadi <
> [hidden email]> wrote:
> >> Coba yang ini, apakah sudah sesuai harapan.
> >> Salam,
> >> Hendrik Karnadi
> >>
> >
> > ________________________________
> > From: Kurei recca <[hidden email]>
> > Sent: Wednesday, 21 March 2012, 10:51
> > Salam Para Master excel,
> > Saya sedang membuat suatu coding dengan vba macro, tetapi saya kesulitan
> dalam membuat messagebox yang menggunakan Ok cancel,,
> > Kondisi yang saya inginkan adalah ketika muncul message box dan keluar
> pilihan "OK" atau "Cancel" akan keluar suatu process jika memilih salah
> satu.
> > Misal dalam kasus ini adalah :
> > Jika saya memilih "Ok" maka akan keluar kalimat "Good Job" di B1,
> > Untuk lebih jelasnya saya lampirkan filenya,,
> > terimakasih
> > Ridwan
> >
>
>  
>
Reply | Threaded
Open this post in threaded view
|

Re: [belajar-excel] Message box Ok Cancel

Rr Wilis
In reply to this post by vw
Jika ada tombol ( didalam MsgBox ) di klik, VBA akan mengembalikan sebuah *
Nilai.*
Nilai tombol yg di klik itu unik, seperti pada tabel yg telah Rara berikan
di bagian bawah
pada email kemarin, seperti ini

Constant

Value

Description

*vbOK*

1

*OK* button pressed

*vbCancel*

2

*Cancel* button pressed

*vbAbort*

3

*Abort* button pressed

*vbRetry*

4

*Retry* button pressed

*vbIgnore*

5

*Ignore* button pressed

*vbYes*

6

*Yes* button pressed

*vbNo*

7

*No* button pressed


Jadi *Nilai sebenarnya* adalah = *Bilangan* (bertype LongInteger, disingkat
Long)

Bahwa kita bisa menulis:  If Jawab = *vbOK *  Then
nilainya sama dengan:      if Jawab = *1* Then

Artinya *VbOK* (dan kawan2) itu adalah sebuah Constant/ *konstanta *(seperti
variable yg tidak dapat
diubah ubah)* *bawaan dari VBA yg bertype *Bilangan Long*;  bukan Boolean,
Bukan String.
Begitulah, CMIIW

Semua Konstanta bawaan dari VBA ada daftarnya dan bisa dilihat NILAI dan
Type datanya
(di Help VBA)

Ya, Semua Variable SEBAIKNYA dideklarasikan lebih dahulu karena akan
mempercepat
proses makro dan mengirit memory yg menggunakan variable tsb.
Variable yg tidak dideklarasikan akan dianggap *bertype VARIANT* yg
memerlukan alokasi
memori lebih besar daripada type lain.  Lihat bagian "DataType" pada Help
VBA

Untuk memaksa kita mendeklarasikan variables, kita dapat menuliskan
pernyataan
Option Explicit
di tiap module di bagian General, atau
mengEnabled checkbox "Require Variable Declaration"
[image: Inline image 1]

Jadi menuliskan Opton Explicit *tidak berpengaruh kepada jalannya program*tetapi
berpengaruh  saat kita mengetikkan code di module.

Sekali lagi hal ini (mendeklarsasikan variable) baru akan terasa jika
program cukup besar
dan panjang.

File untuk Test membuktikan perbedaannya bisa diunduh di sini:
http://www.box.com/shared/rq4qg6lxiq

cmiiw
-Rara




On Sat, Mar 24, 2012 at 2:30 PM, <[hidden email]> wrote:

> **
>
> mba Rara,
> mau tanya dong untuk yang dicomment mba rara dibawah.
>
> mengenai deklarasi variabel seperti dibawah ;
>
> kenapa As Long ? koq ga As Boolean, String atau yg lain?
> dari sample select case ki semprul kemarin kalau Boolean kondisi nya hanya
> 2, true dan false.
> bagaimana dengan deklarasi Double?
> apakah perlu semua variabel di deklarasikan?
> apakah ada bedanya kalau semua -karena saya kurang paham mengenai ini-,
> saya beri saja semua deklarasi menjadi As Variant?
> saat ini kebetulan saya sedang membuat macro, dan kebetulan tanpa ada
> deklarasi, jalan sih jalan, tapi mba rara bilang deklarasi variabel bisa
> membuat lebih cepat lagi proses nya. kalau berkenan mohon berbagi ilmunya.
> terima kasih sebelumnya.
>
> salam
> vega
>
> * ------- Original message -------
> > From: Rara Wilis <[hidden email]>
> > To: [hidden email]
> *
> * > Sent: 21.3., 12:00
> >
> > Mohon maaf, hanya ingin menambah setitik dari makro pak Karnadi yg sudah
> oke..
> > Kita akan lebih baik membiasakan hal-hal kecil sejak menghadapi
> kasus-kasus kecil
> > misalnya menuliskan DEKLARASI Variable, sebelum variable digunakan.
> > Hal ini sangat berpengaruh terhadap kecepatan program, terutama akan
> sangat terasa
> > kelak jika kita membuat proyek2 besar
> >
> > Variable Jawab,  sebelum digunakan dapat dideklarasikan sbb
> >
> > Private Sub Worksheet_Change(ByVal Target As Range)
> >    Dim Jawab As Long  ' atau jika tak tahu type nya
> >   'Dim Jawab          ' ( as Variant)
> >    If Target = Cells(1) Then
> >       If Target <> vbNullString Then
> >          Jawab = MsgBox("Pilih Ok atau Cancel ??", vbOKCancel, "Pilih
> Salah satu !!")
> >          If Jawab = vbOK Then
> >             Target(1, 2).Value = "Good Job"
> >          Else
> >             Target(1, 2).Value = vbNullString
> >          End If
> >       End If
> >    End If
> > End Sub
> > '---------
> > MsgBox Return Values
> > Constant Value Description
> > vbOK 1 OK button pressed
> > vbCancel 2 Cancel button pressed
> > vbAbort 3 Abort button pressed
> > vbRetry 4 Retry button pressed
> > vbIgnore 5 Ignore button pressed
> > vbYes 6 Yes button pressed
> > vbNo 7 No button pressed
> >
> > CMIIW*
>

option explicit.PNG (30K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: [belajar-excel] Message box Ok Cancel

yusajing_ehm
Oke, thx ya teman2 atas pencerahannya..


-----Original Message-----
From: Rara Wilis <[hidden email]>
Sender: [hidden email]
Date: Sat, 24 Mar 2012 15:58:54
To: <[hidden email]>
Reply-To: [hidden email]
Subject: Re: [belajar-excel] Message box Ok Cancel

Jika ada tombol ( didalam MsgBox ) di klik, VBA akan mengembalikan sebuah Nilai.*
Nilai tombol yg di klik itu unik, seperti pada tabel yg telah Rara berikan di bagian bawah pada email kemarin, seperti ini

Constant  Value  Description
vbOK      1      OK button pressed
vbCancel  2      Cancel button pressed
vbAbort   3      Abort button pressed
vbRetry   4      Retry button pressed
vbIgnore  5      Ignore button pressed
vbYes     6      Yes button pressed
vbNo      7      No button pressed

Jadi Nilai sebenarnya adalah = Bilangan (bertype LongInteger, disingkat Long)

Bahwa kita bisa menulis:  If Jawab = vbOK Then
nilainya sama dengan:     if Jawab = 1 Then

Artinya *VbOK* (dan kawan2) itu adalah sebuah Constant/ *konstanta *(seperti variable yg tidak dapat diubah ubah)* *bawaan dari VBA yg bertype *Bilangan Long*;  bukan Boolean,Bukan String.
Begitulah, CMIIW

Semua Konstanta bawaan dari VBA ada daftarnya dan bisa dilihat NILAI dan Type datanya (di Help VBA)

Ya, Semua Variable SEBAIKNYA dideklarasikan lebih dahulu karena akan
mempercepat proses makro dan mengirit memory yg menggunakan variable tsb.
Variable yg tidak dideklarasikan akan dianggap *bertype VARIANT* yg
memerlukan alokasi memori lebih besar daripada type lain.  
Lihat bagian "DataType" pada Help VBA

Untuk memaksa kita mendeklarasikan variables, kita dapat menuliskan
pernyataan
Option Explicit
di tiap module di bagian General, atau
mengEnabled checkbox "Require Variable Declaration"
[image: Inline image 1]

Jadi menuliskan Opton Explicit tidak berpengaruh kepada jalannya program tetapi berpengaruh saat kita mengetikkan code di module.

Sekali lagi hal ini (mendeklarsasikan variable) baru akan terasa jika
program cukup besar dan panjang.

File untuk Test membuktikan perbedaannya bisa diunduh di sini:
http://www.box.com/shared/rq4qg6lxiq

cmiiw
-Rara




On Sat, Mar 24, 2012 at 2:30 PM, <[hidden email]> wrote:

> **
> mba Rara,
> mau tanya dong untuk yang dicomment mba rara dibawah.
>
> mengenai deklarasi variabel seperti dibawah ;
>
> kenapa As Long ? koq ga As Boolean, String atau yg lain?
> dari sample select case ki semprul kemarin kalau Boolean kondisi nya hanya
> 2, true dan false.
> bagaimana dengan deklarasi Double?
> apakah perlu semua variabel di deklarasikan?
> apakah ada bedanya kalau semua -karena saya kurang paham mengenai ini-,
> saya beri saja semua deklarasi menjadi As Variant?
> saat ini kebetulan saya sedang membuat macro, dan kebetulan tanpa ada
> deklarasi, jalan sih jalan, tapi mba rara bilang deklarasi variabel bisa
> membuat lebih cepat lagi proses nya. kalau berkenan mohon berbagi ilmunya.
> terima kasih sebelumnya.
>
> salam
> vega

option explicit.PNG (30K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: [belajar-excel] Message box Ok Cancel

iHaps
In reply to this post by vw
mo Ikutan juga... biar seru...

*Data Type* (tipe data) itu di semua bhs pemrograman sebenarnya hampir sama
tetapi ada variasinya yg agak berbeda misalnya

## bilangan bulat (integer) , utuh tidak mengandung pecahan
*di VBA* di bagi bagi lagi menajdi 3 golongan
Byte = hanya POSITIP 0 sampai 255   (alokasi memori 1 Byte)
Short Integer (dinamai type Integer) = plus minus 32 ribuan (2 byte)
Long Integer (dinamai type Long) = plus minus 2,14 milyar (4 byte)

## bilangan real (riil), bilangan nyata (plus minus, bisa mengandung
pecahan)
*di VBA *dibagi menjadi 2 golongan
Single, lengkapnya: Single-precision floating-point  (4 bytes)  dan
Double, atau lengkapnya: Double-precision floating-point) (8 bytes)

Tabel dalam Sheet excel
*terlampir*<http://www.box.com/s/201622d800182030f3cd>akan menjelaskan
lebih rinci
Mudah-mudahan banyak manfaat nya, minim modhorot nya..Amin...

*- i Haps -*
*
*
*
*

*2012/3/24 <[hidden email]>
*

>
> * *
>
> *mba Rara,
> mau tanya dong untuk yang dicomment mba rara dibawah.
> mengenai deklarasi variabel seperti dibawah ;
> kenapa As Long ? koq ga As Boolean, String atau yg lain?
> dari sample select case ki semprul kemarin kalau Boolean kondisi nya hanya
> 2, true dan false.
> bagaimana dengan deklarasi Double?
> apakah perlu semua variabel di deklarasikan?
> apakah ada bedanya kalau semua -karena saya kurang paham mengenai ini-,
> saya beri saja semua deklarasi menjadi As Variant?
> saat ini kebetulan saya sedang membuat macro, dan kebetulan tanpa ada
> deklarasi, jalan sih jalan, tapi mba rara bilang deklarasi variabel bisa
> membuat lebih cepat lagi proses nya. kalau berkenan mohon berbagi ilmunya.
> terima kasih sebelumnya.
>
> salam
> vega*
> *
> *
> ------- Original message -------
> > From: Rara Wilis <[hidden email]>
> > To: [hidden email]
> > Sent: 21.3., 12:00
> >
> > Mohon maaf, hanya ingin menambah setitik dari makro pak Karnadi yg sudah
> oke..
> > Kita akan lebih baik membiasakan hal-hal kecil sejak menghadapi
> kasus-kasus kecil
> > misalnya menuliskan DEKLARASI Variable, sebelum variable digunakan.
> > Hal ini sangat berpengaruh terhadap kecepatan program, terutama akan
> sangat terasa
> > kelak jika kita membuat proyek2 besar
> >
> > Variable Jawab,  sebelum digunakan dapat dideklarasikan sbb
> >
> > Private Sub Worksheet_Change(ByVal Target As Range)
> >    Dim Jawab As Long  ' atau jika tak tahu type nya
> >   'Dim Jawab          ' ( as Variant)
> >    If Target = Cells(1) Then
> >       If Target <> vbNullString Then
> >          Jawab = MsgBox("Pilih Ok atau Cancel ??", vbOKCancel, "Pilih
> Salah satu !!")
> >          If Jawab = vbOK Then
> >             Target(1, 2).Value = "Good Job"
> >          Else
> >             Target(1, 2).Value = vbNullString
> >          End If
> >       End If
> >    End If
> > End Sub
> > '---------
> > MsgBox Return Values
> > Constant Value Description
> > vbOK 1 OK button pressed
> > vbCancel 2 Cancel button pressed
> > vbAbort 3 Abort button pressed
> > vbRetry 4 Retry button pressed
> > vbIgnore 5 Ignore button pressed
> > vbYes 6 Yes button pressed
> > vbNo 7 No button pressed
> >
> > CMIIW
>

Rekap TYPE DATA (VBA).xlsx (152K) Download Attachment
vw
Reply | Threaded
Open this post in threaded view
|

Re: [belajar-excel] Message box Ok Cancel

vw
In reply to this post by Kid
mr kid dan mba rara,
terima kasih banyak penjelasannya.
saya sudah mulai paham sekarang.

tambah tanya pasti boleh kan...hehehe...
bagaimana menyiasati penulisan atas deklarasi variabel dan set variabel agar tidak perlu saya tulis ulang disetiap macro saya.

misalnya ;
sub reportke1 ()
  call olahdata1
  'dlm olahdata1 sudah saya deklarasi dan set 8 variabel
  call report1
  'dlm report1 ada 5 variabel punya olahdata1 yg dipakai
end sub

sub reportke2 ()
  call olahdata2
  'dlm olahdata2 sudah saya deklarasi dan set 10 variabel
  call olahdata1
  call report2
  'dlm report2 saya perlu deklarasi dan set lagi variabel yg sdh di set di olahdata1 dan olahdata2
end sub

masalahnya adalah saya terpaksa memenggal menjadi beberapa sub macro (olahdata1 smp ke sekian), karena proses setiap report tidak selalu sama.

skrg ini yg ada di kepala saya adalah membuat :

sub deklarasisemuanya()
'dim semua variabelnya
'set semua variabel
'btw jumlahnya banyak sekali disini
end sub

kemudian tinggal call deklarisemuanya.

atau adakah yg lebih baik dari isi yang ada di kepala saya?
mohon pencerahannya lagi

salam
vega

------- Original message -------

> From: Kid Mr. <[hidden email]>
> To: [hidden email]
> Sent: 24.3.,  15:40
>
>  
>
> Boleh ikutan ngobrol ya...
>
> 1. kenapa As Long ? koq ga As Boolean, String atau yg lain? dari sample select case ki semprul kemarin kalau Boolean kondisi nya hanya 2, true dan false.
> bagaimana dengan deklarasi Double?
>>> Pemilihan tipe data saat mendeklarasikan variabel, tergantung pada nilai yang akan diisikan ke variabel tersebut.
> Misal, dalam sebuah proses untuk mengkalkulasi sesuatu, dibutuhkan 7 variabel,
> yaitu x1 dan x2 untuk simpan angka bilangan bulat maka bisa menggunakan tipe Long atau Integer yang cenderung dipilih berdasar range nilai data yang akan disimpan, karena Integer memiliki range nilai yang dapat disimpan yang lebih sempit dibanding Long.
> Deklarasinya :
> dim x1 as long, x2 as long
> bukan dim x1,x2 as long
>
> y3 dan y4 menyimpan status TRUE / FALSE maka memilih tipe data Boolean
> dim y3 as boolean, y4 as boolean
>
> z5 berisi nilai persentase sesuatu yang ada angka dibelakang komanya, maka dipilih single atau double
> dim z5 as double
>
> pesan6 menyimpan teks pesan maka dipilih string
> dim pesan6 as string
>
> rngData menyimpan object range data yang akan diproses maka menggunakan tipe object range
> dim rngdata as range
>
> 2. apakah perlu semua variabel di deklarasikan?
>>> Pendeklarasian seluruh variabel adalah sesuatu yang dianjurkan, meski bukan berarti kalau tidak dideklarasikan terus ndak bisa.
> Ketika baris pertama module bertuliskan Option Explicit, maka pendeklarasian variabel harus dilakukan. Jika tidak ada, maka variabel yang tidak dideklarasikan akan bertipe Variant.
>
> 3. apakah ada bedanya kalau semua -karena saya kurang paham mengenai ini-, saya beri saja semua deklarasi menjadi As Variant?
>>> Tipe data variant adalah tipe data yang bisa berisi apa saja. Karena harus bisa berisi apa saja, maka disediakanlah ruang memori yang luas untuk variabel bertipe data ini. Tentu hal ini akan membutuhkan ruang memori yang besar. Kadang ngelesnya para pemakai variant adalah 'punya memori luas banget kok'
> nah untuk hal ini, coba dibayangkan begini saja....
> Kalau akan bepergian dan harus bawa oleh-oleh, misal ada 7 oleh-oleh seperti di atas sana, apakah akan dipilih kopor yang paling besar untuk setiap oleh-oleh ?
> Padahal ada oleh-oleh yang bisa diwadahi dalam sebuah kantong plastik 1/4 KG ada yang kresek kecil, ada yang kresek besar, ada juga yang muat dimasukkan ke kardus tart ukuran 30 x 30 cm.
>
> 4. saat ini kebetulan saya sedang membuat macro, dan kebetulan tanpa ada deklarasi, jalan sih jalan, tapi mba rara bilang deklarasi variabel bisa membuat lebih cepat
>>> sekarang, semua variabel sudah dideklarasikan.
> bayangkan lagi, komputer bagaikan seorang kuli angkut. Kalau si kuli tadi diminta membawa semua barang bawaan, kira-kira akan cepat mana ya antara dua keadaan di atas ? Harus membawa oleh-oleh yang diwadahi dalam 7 kopor besar ataukah membawa oleh-oleh yang wadahnya disesuaikan dengan ukuran isinya ?
>
> Wassalam,
> Kid.
>
Reply | Threaded
Open this post in threaded view
|

Re: [belajar-excel] Message box Ok Cancel

Rr Wilis
halo...
Ini kayaknya harus ngobrol mengenai : *Ruang Lingkup Berlakunya,  dan Umur
VARIABLE*
Kita akan membicarakan hal yg terjadi di satu workbook saja dulu

Pada Workbook hanya bisa dibuat 1 Project yg berisi module2 VBA
Di dalam sebuah project bisa ada BANYAK MODULE;
kita lihat Setiap Sheet punya module sendiri,
Sebagai Workbook, Workbook juga punya Module sendiri (Thisworkbook)
Setiap Userform juga punya module sendiri.
Selain itu (tanpa membicarakan Class Module) kita dapat meng Add
sendiri *Module-Module
Standar*, jumlah nya bisa banyak sekali

Setiap Module berisi  Deklarasi-Deklarasi  dan  Prosedur-Prosedur
Didalam Sebuah Module Jumlah prosedur sepertinya tidak dibatasi (asal
memorinya masih muat)
Selain di level Module, Deklarasi juga dapat dibuat di Level Procedures

Aturannya begini

*Lingkup Berlakunya VARIABLEs dan CONSTANTs*
[image: Inline image 1]
*
*
*Variable  ataupun Konstanta yg dideklarasikan pada level (*di dalam sebuah*)
Prosedur*
*Jika di deklarasikan dengan statement Dim / Private*
( Dim NamaVariable as TiPeData )
akan berlaku dan dikenal di modul tsb ( di semua Prosedur yg berada di
Module tsb)

*Jika di deklarasikan dengan statement Public*
( Public NamaVariable as TiPeData )
akan berlaku dan dikenal di Semua Module dlm Project tempat dia berada,
yang berarti dikenal dan berlaku di semua prosedur yg ada di dalam Poject )

Variable  ataupun Konstanta yg dideklarasikan secara lokal / pada level
Procedur / dideklarasikan didalam sebuah prosedur;  akan berlaku dan
dikenal di dalam  Prosedur itu saja;  tidak dikenal di prosedur lain di
manapun, walaupun di deklarasikan denngan statement Public.

*UMUR / KETERSEDIAAN Variable ataupun Konstanta *

Variable yg dideklarasikan di dalam Prosedur, hanya tersedia selama
Prosedur dijalankan saja
Jika prosedur sudah berakhir runningnya, variable (nama maupun
Valuenya) hilang lenyap/ tak ada lagi
(walaupun workbook masih running & prosedur lain sedang running)

Variebla yg dideklarasikan di level MODULE, akan tersedia selama Project /
workbook berjalan.

Untuk lengkapnya anda dapat melihat VBA-Help pada bab 'VBA Language
Reference > VBA Conceptual Topics > Declaring Variables.
Karena masih banyak lagi penjelasan, misalnya mendeklarasikan dengan
statement Static dsb,

[image: Inline image 2]

Keadaan seperti ini dapat dimanfaatkan untuk :
<>  variable yg akan di pakai di semua prosedur, anda deklarasikan cukup
sekali di level Module
<>  varieble yg hanya digunakan di dalam suatu prosedur saja, anda
deklarasikan di Prosedur tsb

Selain itu, kita juga dapat membuat REUSABLE Prosedur, baik prosedur Sub
maupun prosedur Function  yg akan dipakai berulang-ulang oleh beberapa
prosedur lain
Jadi setiap ada keperluan mendapatkan hasil proseur tsb kita tanggal
memanggil saja.

Sementara demikian dulu penjelasannya, jika ada hal yg belum "ketangkep"
harap di bicarakan ulang..
Dan tentu saja sambil juga menunggu penjelasan dari Mas Kid yg tentunya
lebih Cool!, benar, lengkap dan mudah difahami.
Demikian juga tambahan dari BeExcellers lain, tetap ditunggu....

_Rara



*On Sun, Mar 25, 2012 at 7:41 AM, <[hidden email]> wrote:
>
> mr kid dan mba rara,
> terima kasih banyak penjelasannya.
> saya sudah mulai paham sekarang.
>
> tambah tanya pasti boleh kan...hehehe...
> bagaimana menyiasati penulisan atas deklarasi variabel dan set variabel
agar tidak perlu saya tulis ulang disetiap macro saya.

>
> misalnya ;
> sub reportke1 ()
> call olahdata1
> 'dlm olahdata1 sudah saya deklarasi dan set 8 variabel
> call report1
> 'dlm report1 ada 5 variabel punya olahdata1 yg dipakai
> end sub
>
> sub reportke2 ()
> call olahdata2
> 'dlm olahdata2 sudah saya deklarasi dan set 10 variabel
> call olahdata1
> call report2
> 'dlm report2 saya perlu deklarasi dan set lagi variabel yg sdh di set di
olahdata1 dan olahdata2
> end sub
>
> masalahnya adalah saya terpaksa memenggal menjadi beberapa sub macro
(olahdata1 smp ke sekian), karena proses setiap report tidak selalu sama.

>
> skrg ini yg ada di kepala saya adalah membuat :
>
> sub deklarasisemuanya()
> 'dim semua variabelnya
> 'set semua variabel
> 'btw jumlahnya banyak sekali disini
> end sub
>
> kemudian tinggal call deklarisemuanya.
>
> atau adakah yg lebih baik dari isi yang ada di kepala saya?
> mohon pencerahannya lagi
>
> salam
> vega
>
>
> ------- Original message -------
> > From: Kid Mr. <[hidden email]>
> > To: [hidden email]
> > Sent: 24.3., 15:40
> > Boleh ikutan ngobrol ya...*

hierarki ruang lingkup umur.PNG (10K) Download Attachment
declaring variables.PNG (52K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: [belajar-excel] Message box Ok Cancel

Rr Wilis
maaf, koreksi ada yg salah fatal:

tertulis
*
*
*Lingkup Berlakunya VARIABLEs dan CONSTANTs*
[image: Inline image 1]
Variable ataupun Konstanta yg dideklarasikan pada level (di dalam sebuah)
Prosedur
Jika di deklarasikan dengan statement Dim / Private
( Dim NamaVariable as TiPeData )
akan berlaku dan dikenal di modul tsb ( di semua Prosedur yg berada di
Module tsb)


seharusnya:
*
*
*Lingkup Berlakunya VARIABLEs dan CONSTANTs*
[image: Inline image 1]
Variable ataupun Konstanta yg dideklarasikan pada level (di dalam sebuah) *
MODULE*
Jika di deklarasikan dengan statement Dim / Private
( Dim NamaVariable as TiPeData )
akan berlaku dan dikenal di modul tsb ( di semua Prosedur yg berada di
Module tsb)




On Sun, Mar 25, 2012 at 3:38 PM, Rara Wilis <[hidden email]> wrote:

> halo...
> Ini kayaknya harus ngobrol mengenai : *Ruang Lingkup Berlakunya,  dan
> Umur VARIABLE*
> Kita akan membicarakan hal yg terjadi di satu workbook saja dulu
> ---------------- cut -------
>
vw
Reply | Threaded
Open this post in threaded view
|

Re: [belajar-excel] Message box Ok Cancel

vw
terima kasih lagi ya mba
penjelasan mba rara sangat mencerahkan + test drive semlm bermain2 dengan deklarasi public dan dim

------- Original message -------

> From: Rara Wilis <[hidden email]>
> To: [hidden email]
>
> maaf, koreksi ada yg salah fatal:
>
> tertulis
>
> Lingkup Berlakunya VARIABLEs dan CONSTANTs
> Variable ataupun Konstanta yg dideklarasikan pada level (di dalam sebuah) Prosedur
> Jika di deklarasikan dengan statement Dim / Private
> ( Dim NamaVariable as TiPeData )
> akan berlaku dan dikenal di modul tsb ( di semua Prosedur yg berada di Module tsb)
>
>
> seharusnya:
>
> Lingkup Berlakunya VARIABLEs dan CONSTANTs
>
> Variable ataupun Konstanta yg dideklarasikan pada level (di dalam sebuah) MODULE
> Jika di deklarasikan dengan statement Dim / Private
> ( Dim NamaVariable as TiPeData )
> akan berlaku dan dikenal di modul tsb ( di semua Prosedur yg berada di Module tsb)
>
>
>
>
> On Sun, Mar 25, 2012 at 3:38 PM, Rara Wilis <[hidden email]> wrote:
>> halo...
>> Ini kayaknya harus ngobrol mengenai : Ruang Lingkup Berlakunya,  dan Umur VARIABLE
>> Kita akan membicarakan hal yg terjadi di satu workbook saja dulu
>> ---------------- cut -------

vw
Reply | Threaded
Open this post in threaded view
|

Re: [belajar-excel] Message box Ok Cancel

vw
In reply to this post by iHaps
terima kasih mba indri
saya sudah mencoba2 semlm + file dari mba.
saya sudah paham sekarang untuk penggunaan deklarasinya.

------- Original message -------

> From: i Haps <[hidden email]>
> To: [hidden email]
>
> mo Ikutan juga... biar seru...
>
> Data Type (tipe data) itu di semua bhs pemrograman sebenarnya hampir sama
> tetapi ada variasinya yg agak berbeda misalnya 
>
> ## bilangan bulat (integer) , utuh tidak mengandung pecahan
> di VBA di bagi bagi lagi menajdi 3 golongan
> Byte = hanya POSITIP 0 sampai 255   (alokasi memori 1 Byte)
> Short Integer (dinamai type Integer) = plus minus 32 ribuan (2 byte)
> Long Integer (dinamai type Long) = plus minus 2,14 milyar (4 byte)
>
> ## bilangan real (riil), bilangan nyata (plus minus, bisa mengandung pecahan)  
> di VBA dibagi menjadi 2 golongan
> Single, lengkapnya: Single-precision floating-point  (4 bytes)  dan 
> Double, atau lengkapnya: Double-precision floating-point) (8 bytes)
>
> Tabel dalam Sheet excel terlampir akan menjelaskan lebih rinci
> Mudah-mudahan banyak manfaat nya, minim modhorot nya..Amin...
>
> - i Haps -
Kid
Reply | Threaded
Open this post in threaded view
|

Re: [belajar-excel] Message box Ok Cancel

Kid
Administrator
In reply to this post by Rr Wilis
Ikutan lagi....

Dalam VB/VBA, mestinya sudah tahu bahwa ada kelompok-kelompok kelas.
Misal pada VBA Excel saja, ada kelompok di VBE (VB Editor)
1. object dari kelasnya Excel seperti Sheet1, Sheet2, ThisWorkbook
2. object dari kelasnya userform seperti UserForm1, UserForm2, dsb
3. object dari kelasnya general module seperti Module1,Module2, dsb
4. object dari kelasnya user class seperti Class1,class2, dsb

Untuk awalan, fokus dulu pada no 1 sampai 3 saja.
No 1 dan 2, pada dasarnya adalah object-object yang pendiam dan penyendiri,
yang sering disebut private.
No 3, pada dasarnya adalah object yang suka bersosialisasi, jadi enak
diajak ngobrol yang sering disebut public.

Sampai sini, sudah ada bayangan bahwa ada benda (object) yang memiliki
karakteristik private dan public.
Jadi, sebenarnya apa sih Public dan Private itu ? Apakah sekedar ruang
lingkup kerja ?
Kalau contoh diatas, maka yang tampak adalah private dan public itu
cenderung ke karakteristik sesuatu (object) dalam menyikapi lingkungannya.
Kalau begitu, apakah lingkungan dari contoh diatas ?
Lingkungannya adalah VBA Excel.
Maka, untuk memanfaatkan object itu, harus disertai memanggil namanya,
supaya si benda nengok dulu baru bisa diberi perintah.

Contoh :
Untuk mengaktifkan sebuah userform, maka bunyinya :
*UserForm1 *Show
>> Memerintahkan melalui Excel (lingkungan) yang jadi bosnya UserForm1
sehingga tahu cara memerintah si userform1 untuk tampil keatas panggung.

atau mau menggunakan range yang ada di sheet1 :
*sheet1*.range("x1:z9").activate
>> memerintah secara langsung kepada si sheet1 supaya memberi kesempatan
kepada pemanggil untuk mengaktifkan range x1:z9 yang dimiliki si sheet1.

Untuk hal seperti ini akan terkait erat dengan yang namanya object dan
karakteristiknya. Tapi ndak usah dipedulikan, karena bahasannya kali ini
tentang private, public dan dim yang cenderung dikenal sebagai ruang
lingkup kerja.
Tapi, dari contoh diatas, tampak jelas bahwa penggunaan apapun yang
dimiliki si object, harus pakai manggil namanya dulu. Mau pakai rangenya
sheet1, harus panggil dulu namanya sheet1. Setelah nengok, baru bisa beri
perintah. Itulah karakteristik private.

Untuk karakteristik public, ndak perlu pake panggil-panggil segala.

Setelah tahu ada kelompok yang demikian, maka yang perlu diketahui
berikutnya adalah adanya bentuk-bentuk blok program yang sering disebut
routine atau prosedur.

Prosedur ada yang jenisnya Sub atau Function (yang sering dipakai). Jadi
bukan Public Sub, Public Function, Private Sub, Private Function.
Masing-masing jenis prosedur, bisa diberi karakteristik respon terhadap
lingkungan jenis Private atau Public.
Dengan begitu, maka sering ditemui :
>> karakteristik Private
-- prosedur dengan karakteristik private tidak dapat dipergunakan oleh
siapapun selain pemiliknya (object tempat tinggalnya)
contoh 1 : (prosedur yang tinggal di sheet1, maka hanya bisa digunakan oleh
si sheet1 saja ~ bener-bener barang pribadinya si sheet1)
Private Sub Worksheet_Change(byval target as range)
yang sering dikenal sebagai prosedur event sub.
Disebut event karena prosedur ini juga akan aktif ketika ada kejadian
minimal sebuah cell di dalam worksheet yang mengalami pengubahan nilai.

contoh 2 : (prosedur yang tinggal di module umum seperti module1 yang
karakterisk si module itu public, tetapi tetap saja gak bisa dipakai oleh
selain module1)
Private Sub PersiapanCetak( rngData as range , lStatus as long )

>> karakteristik Public
Contoh 1 : (prosedur yang diletakkan di sheet1 misalnya berbunyi seperti
berikut ini)
Public Sub SetNilaiPesananSheetInput()
-- Prosedur ini diletakkan pada sebuah object sheet (misal di sheet1) yang
pada dasarnya berkarakteristik private.
-- Pemberian karakteristik public pada si prosedur, akan membuat prosedur
ini bisa digunakan oleh yang lainnya (misal oleh module1 atau userform1
dsb), selama yang mau make itu (module1 dsb itu) manggil yang punya dulu.

Contoh lengkapnya begini deh :
di sheet1, tulis :
public sub ProsedurPunyanyaSheet1()
      msgbox "Aku adalah prosedur karakteristik public di lokasi sheet1
yang berkarakteristik private"
end sub

kemudian, di module1 (Insert Module kalau belum ada), tulis :
public sub PanggilProsedurDiSheet1Ahhh()
      sheet1.ProsedurPunyanyaSheet1
end sub
jalankan prosedur PanggilProsedurDiSheet1Ahhh

Jika tulisan sheet1. dihapus dari baris  sheet1.ProsedurPunyanyaSheet1 maka
si VBA akan protes.

Contoh 2 : (pada sebuah module umum lainnya -- misal module2 -- insert
module kalau belum ada)
public sub PanggilPunyanyaModule1Ahh()
       PanggilProsedurDiSheet1Ahhh
end sub
lalu jalankan.

Akan tampak bahwa prosedur PanggilProsedurDiSheet1Ahhh yang diberi
karakterisik public dan tinggal di object module1 yang juga
karakteristiknya public, bisa dipanggil dan dipakai sewaktu-waktu.


Untuk jenis prosedur Function maka yang berubah adalah bentuk bloknya yang
tadinya sub jadi function disertai penetapan tipe data hasil dari function.
Baris End Sub akan jadi End Function.

Setelah rada bingung campur sedikit mudeng tentang public dan private pada
sebuah benda seperti module atau form atau sheet, kemudian rada paham
tentang public dan private pada sebuah prosedur baik sub atau function,
maka mulailah cerita tentang public dan private pada sebuah variabel.

Variabel juga bisa diberi karakteristik Public dan Private. Tapi, hanya
untuk variabel yang dideklarasikan diluar prosedur.
Untuk deklarasi variabel dalam sebuah prosedur, digunakan Dim.
Dim juga bisa digunakan untuk diluar prosedur, yang karakteristiknya akan
mirip dengan penggunaan Private. Tapi, sebaiknya tetap menggunakan Private
daripada Dim.

Cara deklarasi secara umum :
karakteristiknya nama_variabelnya AS tipedatanya

contoh : disebuah module umum bernama module1 (kalau belum ada module1,
lakukan Insert Module)
Option Explicit
Public rngKriteria as range
Public lNum AS Long
Private lRec AS Long

Public Sub CetakFaktur()
       Dim rngData as Range
       ' ada baris perintah banyak disini, misal :
       lNum = 1945
end sub

Maka,
A. variabel rngKriteria dan lNum akan dapat dipergunakan secara langsung
oleh siapapun dimanapun berada oleh prosedur apa saja selama tidak ada
module umum yang mendeklarasikan sama seperti yang dideklarasikan oleh
module1 karena :
1. module1 berkarakteristik Public
2. variabel dideklarasi dengan karakteristik Public

B. variabel lRec hanya dapat digunakan di module1 saja, pada seluruh
prosedurnya karena :
1. variabel dideklarasi dengan karakteristik Private

C. variabel rngData hanya dapat digunakan di prosedur CetakFaktur di
module1 saja. Prosedur lain, baik yang dalam module1 apalagi yang diluar
module1 tidak dapat menggunakannya karena :
1. variabel dideklarasi dengan karakteristik Dim dalam sebuah prosedur.


Bagaimana jika di Sheet1 ada prosedur berikut berikut ini :

Option Explicit

'ada prosedur untuk set nilai lnum juga
Public Sub SetVarLNumOlehSheet1()
       lnum=1990
end sub

Pertanyaannya, lNum yang mana yang diset oleh prosedur SetVarLNumOlehSheet1
?
Tentu saja variabel lNum yang dideklarasi di Module1 di atas sana.

Jika isi sheet1 diubah menjadi : (lihat bagian bold)
Option Explicit
*Public lNum AS Long*

'ada prosedur untuk set nilai lnum juga
Public Sub SetVarLNumOlehSheet1()
       lnum=2012
end sub

lNum yang mana yang diisi oleh prosedur SetVarLNumOlehSheet1 ?
Tentu saja lNum yang dideklarasikan di sheet1.
Lalu nilai lNum yang dideklarasikan di Module1 berapa nilainya ?
Jika prosedur CetakFaktur di module1 telah dijalankan, maka nilai lNum di
module1 adalah 1990.

Dari 2 contoh diatas, tampak bahwa deklarasi variabel dengan karakteristik
Public di sebuah module umum (module1 dalam contoh), tidak serta merta
bekerja disemua tempat. Bagaimana cara pakai kedua variabel itu ?

Misal dimodule2 (buat baru jika belum ada)
option explicit

public sub SetSemuaLNumOlehMod2()
       module1.lnum=100
       sheet1.lnum=3000
       *msgbox "LNum di module1 = " & lnum & vbcrlf & "LNum di sheet1 = " &
sheet1.lnum*
end sub

Jadi, dengan memanggil secara spesifik pemilik variabelnya, varibel
berkarakteristik public bisa digunakan oleh pihak lain.
Tapi, *hati-hati dengan yang diwarna merah*. Disana ada proses memanfaatkan
nilai lnum tanpa memanggil pemiliknya.
Baris merah ini akan bekerja jika tidak ada module umum lainnya yang
mendeklarasikan Public lNum. Jika ada, maka akan error. Dan errornya bisa
dieliminir ketika bagian *& lNum* diganti menjadi *& module1.lnum*

Jika ingin mencoba, silakan buat module baru (misal module3) yang diisi
dengan :
Option Explicit
Public lNum as Long

Public Sub SetNilaiLNumDiMod3OlehMod3()
      lNum=7500
end sub

Baris lNum=7500 akan mengisi varibel lNum di module3 dengan 7500
Kemudian coba run prosedur SetSemuaLNumOlehMod2 yang ada di module2. Jika
error, ganti  bagian *& lNum* diganti menjadi *& module1.lnum *dan run lagi.

Dari beberapa contoh ini, maka bisa diketahui bahwa setiap object class
bisa mendeklarasikan variabel Public,Private, atau Dim, dan akan
diperlakukan sendiri-sendiri sesuai pendeklarator variabelnya. Object class
lainnya bisa menggunakan milik object class tertentu secara benar jika
disertai pemanggilan nama pendeklarator variabelnya.

Secara umum, biasanya deklarasi sebuah variabel dilakukan untuk mewakili
satu varibel yang langsung ditentukan akan digunakan dimana saja.
Misal, di module1 dideklarasikan :
Public rngInput as range

Maka diobject class manapun tidak akan ditemukan lagi deklarasi seperti
itu. Penggunaan rngInput bisa digunakan oleh object class lain (sheet1,
userform1, module1,dsb) secara langsung.

Secara garis besar, menentukan variabel adalah tergantung intensitas
penggunaannya. Misal, rngdata yang merujuk ke Sheet7 di range A1:G19 akan
selalu digunakan disetiap proses yang prosedur prosesnya bisa ada di
sheet1, module3, userform5 dsb, maka cukup dideklarasikan di sebuah module
umum (misal module1) kemudian digunakan oleh semua prosedur.

Jika ternyata ada prosedur yang butuh rngInput tapi dengan isi range
merujuk ke hal yang berbeda dengan prosedur lainnya yang menggunakan
rngInput, maka dibuatlah sebuah variabel baru, misal Public rngInputLainnya
as range
Begitu seterusnya.

-----------------------

Contoh :
Sheet1 dan sheet3 butuh bekerja dengan range yang ada di sheet bernama Data
(misal sheet7) mulai range A1 diseluruh blok data kontinyunya
(currentregion)

Maka disebuah module umum (misal module1) ada bunyi :
Option Explicit
Public rngKu as range

di sheet1 ada prosedur :
public sub DataNamaSaja()
     set rngKu = sheet7.range("a1").currentregion
     'misal data nama adalah kolom B saja dan akan dicopy ke sheet13 mulai
range k1
     rngku.resize(,1).offset(,1).copy sheet13.range("k1")
end sub

di sheet3 ada prosedur :
public sub DataUmurSaja()
     set rngKu = sheet7.range("a1").currentregion
     'misal data umur adalah kolom E saja dan akan dicopy ke sheet13 mulai
range j1
     rngku.resize(,1).offset(,4).copy sheet13.range("j1")
end sub

Pada kedua prosedur yang ada di masing-masing sheet tidak ada deklarasi
rngKu lagi bukan ?
Contoh seperti inilah yang sering disebut bahwa Public dan Private adalah
berkaitan dengan ruang lingkup variabel.

------------------------

Jadi, Public dan Private bukan sekedar ruang lingkup variabel saja, tetapi
mencakup karakteristik akses pemakaian.
Hal ini berkaitan erat dengan cara komputer membaca sebuah data yang
melalui pointernya, bukan nama variabelnya. Tapi hal seperti pointer ini
ndak usah dipikirkan, biar jadi urusannya si komputer saja. ndak mumet kalo
mikirin pointer.

Moga-moga jadi bingung dan jadi punya imajinasi lain tentang variabel,
public, private dsb, sehingga selalu muncul rasa ingin tahu lebih banyak
lagi.

Wassalam,
Kid.

On Sun, Mar 25, 2012 at 15:43, Rara Wilis <[hidden email]> wrote:

> **
>
>
> maaf, koreksi ada yg salah fatal:
>
> tertulis
> *
> *
> *Lingkup Berlakunya VARIABLEs dan CONSTANTs*
>
> Variable ataupun Konstanta yg dideklarasikan pada level (di dalam sebuah)
> Prosedur
> Jika di deklarasikan dengan statement Dim / Private
> ( Dim NamaVariable as TiPeData )
> akan berlaku dan dikenal di modul tsb ( di semua Prosedur yg berada di
> Module tsb)
>
>
> seharusnya:
> *
> *
> *Lingkup Berlakunya VARIABLEs dan CONSTANTs*
>
> Variable ataupun Konstanta yg dideklarasikan pada level (di dalam sebuah)
> *MODULE*
>  Jika di deklarasikan dengan statement Dim / Private
> ( Dim NamaVariable as TiPeData )
> akan berlaku dan dikenal di modul tsb ( di semua Prosedur yg berada di
> Module tsb)
>
>
>
>
> On Sun, Mar 25, 2012 at 3:38 PM, Rara Wilis <[hidden email]> wrote:
>
>> halo...
>> Ini kayaknya harus ngobrol mengenai : *Ruang Lingkup Berlakunya,  dan
>> Umur VARIABLE*
>> Kita akan membicarakan hal yg terjadi di satu workbook saja dulu
>> ---------------- cut -------
>>
>  
>
>
Reply | Threaded
Open this post in threaded view
|

[belajar-excel] Re: Message box Ok Cancel

summonery
Administrator
Moga-moga jadi bingung dan jadi punya imajinasi lain tentang
variabel,public, private dsb, sehingga selalu muncul rasa ingin tahu
lebih banyak
lagi.
Amiin...
>> karakteristik Private
-- prosedur dengan karakteristik private tidak dapat dipergunakan oleh
siapapun selain pemiliknya (object tempat tinggalnya)
Namun dengan memanggilnya dengan Run "NamaProsedurDiModuleYangLain" kita
dapat menjalankan suatu prosedur lain yang berada di module yang berbeda
meski prosedur yang dipanggil berkarasteristik private.

>semoga bermanfaat

--- In [hidden email], "Kid Mr." <mr.nmkid@...> wrote:

>
> Ikutan lagi....
>
> Dalam VB/VBA, mestinya sudah tahu bahwa ada kelompok-kelompok kelas.
> Misal pada VBA Excel saja, ada kelompok di VBE (VB Editor)
> 1. object dari kelasnya Excel seperti Sheet1, Sheet2, ThisWorkbook
> 2. object dari kelasnya userform seperti UserForm1, UserForm2, dsb
> 3. object dari kelasnya general module seperti Module1,Module2, dsb
> 4. object dari kelasnya user class seperti Class1,class2, dsb
>
> Untuk awalan, fokus dulu pada no 1 sampai 3 saja.
> No 1 dan 2, pada dasarnya adalah object-object yang pendiam dan
penyendiri,

> yang sering disebut private.
> No 3, pada dasarnya adalah object yang suka bersosialisasi, jadi enak
> diajak ngobrol yang sering disebut public.
>
> Sampai sini, sudah ada bayangan bahwa ada benda (object) yang memiliki
> karakteristik private dan public.
> Jadi, sebenarnya apa sih Public dan Private itu ? Apakah sekedar ruang
> lingkup kerja ?
> Kalau contoh diatas, maka yang tampak adalah private dan public itu
> cenderung ke karakteristik sesuatu (object) dalam menyikapi
lingkungannya.

> Kalau begitu, apakah lingkungan dari contoh diatas ?
> Lingkungannya adalah VBA Excel.
> Maka, untuk memanfaatkan object itu, harus disertai memanggil namanya,
> supaya si benda nengok dulu baru bisa diberi perintah.
>
> Contoh :
> Untuk mengaktifkan sebuah userform, maka bunyinya :
> *UserForm1 *Show
> >> Memerintahkan melalui Excel (lingkungan) yang jadi bosnya UserForm1
> sehingga tahu cara memerintah si userform1 untuk tampil keatas
panggung.
>
> atau mau menggunakan range yang ada di sheet1 :
> *sheet1*.range("x1:z9").activate
> >> memerintah secara langsung kepada si sheet1 supaya memberi
kesempatan
> kepada pemanggil untuk mengaktifkan range x1:z9 yang dimiliki si
sheet1.
>
> Untuk hal seperti ini akan terkait erat dengan yang namanya object dan
> karakteristiknya. Tapi ndak usah dipedulikan, karena bahasannya kali
ini
> tentang private, public dan dim yang cenderung dikenal sebagai ruang
> lingkup kerja.
> Tapi, dari contoh diatas, tampak jelas bahwa penggunaan apapun yang
> dimiliki si object, harus pakai manggil namanya dulu. Mau pakai
rangenya
> sheet1, harus panggil dulu namanya sheet1. Setelah nengok, baru bisa
beri
> perintah. Itulah karakteristik private.
>
> Untuk karakteristik public, ndak perlu pake panggil-panggil segala.
>
> Setelah tahu ada kelompok yang demikian, maka yang perlu diketahui
> berikutnya adalah adanya bentuk-bentuk blok program yang sering
disebut
> routine atau prosedur.
>
> Prosedur ada yang jenisnya Sub atau Function (yang sering dipakai).
Jadi
> bukan Public Sub, Public Function, Private Sub, Private Function.
> Masing-masing jenis prosedur, bisa diberi karakteristik respon
terhadap
> lingkungan jenis Private atau Public.
> Dengan begitu, maka sering ditemui :
> >> karakteristik Private
> -- prosedur dengan karakteristik private tidak dapat dipergunakan oleh
> siapapun selain pemiliknya (object tempat tinggalnya)
> contoh 1 : (prosedur yang tinggal di sheet1, maka hanya bisa digunakan
oleh
> si sheet1 saja ~ bener-bener barang pribadinya si sheet1)
> Private Sub Worksheet_Change(byval target as range)
> yang sering dikenal sebagai prosedur event sub.
> Disebut event karena prosedur ini juga akan aktif ketika ada kejadian
> minimal sebuah cell di dalam worksheet yang mengalami pengubahan
nilai.
>
> contoh 2 : (prosedur yang tinggal di module umum seperti module1 yang
> karakterisk si module itu public, tetapi tetap saja gak bisa dipakai
oleh
> selain module1)
> Private Sub PersiapanCetak( rngData as range , lStatus as long )
>
> >> karakteristik Public
> Contoh 1 : (prosedur yang diletakkan di sheet1 misalnya berbunyi
seperti
> berikut ini)
> Public Sub SetNilaiPesananSheetInput()
> -- Prosedur ini diletakkan pada sebuah object sheet (misal di sheet1)
yang
> pada dasarnya berkarakteristik private.
> -- Pemberian karakteristik public pada si prosedur, akan membuat
prosedur
> ini bisa digunakan oleh yang lainnya (misal oleh module1 atau
userform1
> dsb), selama yang mau make itu (module1 dsb itu) manggil yang punya
dulu.
>
> Contoh lengkapnya begini deh :
> di sheet1, tulis :
> public sub ProsedurPunyanyaSheet1()
>       msgbox "Aku adalah prosedur karakteristik public di lokasi
sheet1

> yang berkarakteristik private"
> end sub
>
> kemudian, di module1 (Insert Module kalau belum ada), tulis :
> public sub PanggilProsedurDiSheet1Ahhh()
>       sheet1.ProsedurPunyanyaSheet1
> end sub
> jalankan prosedur PanggilProsedurDiSheet1Ahhh
>
> Jika tulisan sheet1. dihapus dari baris  sheet1.ProsedurPunyanyaSheet1
maka

> si VBA akan protes.
>
> Contoh 2 : (pada sebuah module umum lainnya -- misal module2 -- insert
> module kalau belum ada)
> public sub PanggilPunyanyaModule1Ahh()
>        PanggilProsedurDiSheet1Ahhh
> end sub
> lalu jalankan.
>
> Akan tampak bahwa prosedur PanggilProsedurDiSheet1Ahhh yang diberi
> karakterisik public dan tinggal di object module1 yang juga
> karakteristiknya public, bisa dipanggil dan dipakai sewaktu-waktu.
>
>
> Untuk jenis prosedur Function maka yang berubah adalah bentuk bloknya
yang
> tadinya sub jadi function disertai penetapan tipe data hasil dari
function.
> Baris End Sub akan jadi End Function.
>
> Setelah rada bingung campur sedikit mudeng tentang public dan private
pada
> sebuah benda seperti module atau form atau sheet, kemudian rada paham
> tentang public dan private pada sebuah prosedur baik sub atau
function,
> maka mulailah cerita tentang public dan private pada sebuah variabel.
>
> Variabel juga bisa diberi karakteristik Public dan Private. Tapi,
hanya
> untuk variabel yang dideklarasikan diluar prosedur.
> Untuk deklarasi variabel dalam sebuah prosedur, digunakan Dim.
> Dim juga bisa digunakan untuk diluar prosedur, yang karakteristiknya
akan
> mirip dengan penggunaan Private. Tapi, sebaiknya tetap menggunakan
Private
> daripada Dim.
>
> Cara deklarasi secara umum :
> karakteristiknya nama_variabelnya AS tipedatanya
>
> contoh : disebuah module umum bernama module1 (kalau belum ada
module1,

> lakukan Insert Module)
> Option Explicit
> Public rngKriteria as range
> Public lNum AS Long
> Private lRec AS Long
>
> Public Sub CetakFaktur()
>        Dim rngData as Range
>        ' ada baris perintah banyak disini, misal :
>        lNum = 1945
> end sub
>
> Maka,
> A. variabel rngKriteria dan lNum akan dapat dipergunakan secara
langsung

> oleh siapapun dimanapun berada oleh prosedur apa saja selama tidak ada
> module umum yang mendeklarasikan sama seperti yang dideklarasikan oleh
> module1 karena :
> 1. module1 berkarakteristik Public
> 2. variabel dideklarasi dengan karakteristik Public
>
> B. variabel lRec hanya dapat digunakan di module1 saja, pada seluruh
> prosedurnya karena :
> 1. variabel dideklarasi dengan karakteristik Private
>
> C. variabel rngData hanya dapat digunakan di prosedur CetakFaktur di
> module1 saja. Prosedur lain, baik yang dalam module1 apalagi yang
diluar
> module1 tidak dapat menggunakannya karena :
> 1. variabel dideklarasi dengan karakteristik Dim dalam sebuah
prosedur.

>
>
> Bagaimana jika di Sheet1 ada prosedur berikut berikut ini :
>
> Option Explicit
>
> 'ada prosedur untuk set nilai lnum juga
> Public Sub SetVarLNumOlehSheet1()
>        lnum=1990
> end sub
>
> Pertanyaannya, lNum yang mana yang diset oleh prosedur
SetVarLNumOlehSheet1

> ?
> Tentu saja variabel lNum yang dideklarasi di Module1 di atas sana.
>
> Jika isi sheet1 diubah menjadi : (lihat bagian bold)
> Option Explicit
> *Public lNum AS Long*
>
> 'ada prosedur untuk set nilai lnum juga
> Public Sub SetVarLNumOlehSheet1()
>        lnum=2012
> end sub
>
> lNum yang mana yang diisi oleh prosedur SetVarLNumOlehSheet1 ?
> Tentu saja lNum yang dideklarasikan di sheet1.
> Lalu nilai lNum yang dideklarasikan di Module1 berapa nilainya ?
> Jika prosedur CetakFaktur di module1 telah dijalankan, maka nilai lNum
di
> module1 adalah 1990.
>
> Dari 2 contoh diatas, tampak bahwa deklarasi variabel dengan
karakteristik

> Public di sebuah module umum (module1 dalam contoh), tidak serta merta
> bekerja disemua tempat. Bagaimana cara pakai kedua variabel itu ?
>
> Misal dimodule2 (buat baru jika belum ada)
> option explicit
>
> public sub SetSemuaLNumOlehMod2()
>        module1.lnum=100
>        sheet1.lnum=3000
>        *msgbox "LNum di module1 = " & lnum & vbcrlf & "LNum di sheet1
= " &
> sheet1.lnum*
> end sub
>
> Jadi, dengan memanggil secara spesifik pemilik variabelnya, varibel
> berkarakteristik public bisa digunakan oleh pihak lain.
> Tapi, *hati-hati dengan yang diwarna merah*. Disana ada proses
memanfaatkan
> nilai lnum tanpa memanggil pemiliknya.
> Baris merah ini akan bekerja jika tidak ada module umum lainnya yang
> mendeklarasikan Public lNum. Jika ada, maka akan error. Dan errornya
bisa
> dieliminir ketika bagian *& lNum* diganti menjadi *& module1.lnum*
>
> Jika ingin mencoba, silakan buat module baru (misal module3) yang
diisi

> dengan :
> Option Explicit
> Public lNum as Long
>
> Public Sub SetNilaiLNumDiMod3OlehMod3()
>       lNum=7500
> end sub
>
> Baris lNum=7500 akan mengisi varibel lNum di module3 dengan 7500
> Kemudian coba run prosedur SetSemuaLNumOlehMod2 yang ada di module2.
Jika
> error, ganti  bagian *& lNum* diganti menjadi *& module1.lnum *dan run
lagi.
>
> Dari beberapa contoh ini, maka bisa diketahui bahwa setiap object
class
> bisa mendeklarasikan variabel Public,Private, atau Dim, dan akan
> diperlakukan sendiri-sendiri sesuai pendeklarator variabelnya. Object
class
> lainnya bisa menggunakan milik object class tertentu secara benar jika
> disertai pemanggilan nama pendeklarator variabelnya.
>
> Secara umum, biasanya deklarasi sebuah variabel dilakukan untuk
mewakili
> satu varibel yang langsung ditentukan akan digunakan dimana saja.
> Misal, di module1 dideklarasikan :
> Public rngInput as range
>
> Maka diobject class manapun tidak akan ditemukan lagi deklarasi
seperti
> itu. Penggunaan rngInput bisa digunakan oleh object class lain
(sheet1,
> userform1, module1,dsb) secara langsung.
>
> Secara garis besar, menentukan variabel adalah tergantung intensitas
> penggunaannya. Misal, rngdata yang merujuk ke Sheet7 di range A1:G19
akan
> selalu digunakan disetiap proses yang prosedur prosesnya bisa ada di
> sheet1, module3, userform5 dsb, maka cukup dideklarasikan di sebuah
module
> umum (misal module1) kemudian digunakan oleh semua prosedur.
>
> Jika ternyata ada prosedur yang butuh rngInput tapi dengan isi range
> merujuk ke hal yang berbeda dengan prosedur lainnya yang menggunakan
> rngInput, maka dibuatlah sebuah variabel baru, misal Public
rngInputLainnya
> as range
> Begitu seterusnya.
>
> -----------------------
>
> Contoh :
> Sheet1 dan sheet3 butuh bekerja dengan range yang ada di sheet bernama
Data

> (misal sheet7) mulai range A1 diseluruh blok data kontinyunya
> (currentregion)
>
> Maka disebuah module umum (misal module1) ada bunyi :
> Option Explicit
> Public rngKu as range
>
> di sheet1 ada prosedur :
> public sub DataNamaSaja()
>      set rngKu = sheet7.range("a1").currentregion
>      'misal data nama adalah kolom B saja dan akan dicopy ke sheet13
mulai
> range k1
>      rngku.resize(,1).offset(,1).copy sheet13.range("k1")
> end sub
>
> di sheet3 ada prosedur :
> public sub DataUmurSaja()
>      set rngKu = sheet7.range("a1").currentregion
>      'misal data umur adalah kolom E saja dan akan dicopy ke sheet13
mulai
> range j1
>      rngku.resize(,1).offset(,4).copy sheet13.range("j1")
> end sub
>
> Pada kedua prosedur yang ada di masing-masing sheet tidak ada
deklarasi
> rngKu lagi bukan ?
> Contoh seperti inilah yang sering disebut bahwa Public dan Private
adalah
> berkaitan dengan ruang lingkup variabel.
>
> ------------------------
>
> Jadi, Public dan Private bukan sekedar ruang lingkup variabel saja,
tetapi
> mencakup karakteristik akses pemakaian.
> Hal ini berkaitan erat dengan cara komputer membaca sebuah data yang
> melalui pointernya, bukan nama variabelnya. Tapi hal seperti pointer
ini
> ndak usah dipikirkan, biar jadi urusannya si komputer saja. ndak mumet
kalo
> mikirin pointer.
>
> Moga-moga jadi bingung dan jadi punya imajinasi lain tentang variabel,
> public, private dsb, sehingga selalu muncul rasa ingin tahu lebih
banyak

> lagi.
>
> Wassalam,
> Kid.
>
> On Sun, Mar 25, 2012 at 15:43, Rara Wilis ra2wilis@... wrote:
>
> > **
> >
> >
> > maaf, koreksi ada yg salah fatal:
> >
> > tertulis
> > *
> > *
> > *Lingkup Berlakunya VARIABLEs dan CONSTANTs*
> >
> > Variable ataupun Konstanta yg dideklarasikan pada level (di dalam
sebuah)
> > Prosedur
> > Jika di deklarasikan dengan statement Dim / Private
> > ( Dim NamaVariable as TiPeData )
> > akan berlaku dan dikenal di modul tsb ( di semua Prosedur yg berada
di
> > Module tsb)
> >
> >
> > seharusnya:
> > *
> > *
> > *Lingkup Berlakunya VARIABLEs dan CONSTANTs*
> >
> > Variable ataupun Konstanta yg dideklarasikan pada level (di dalam
sebuah)
> > *MODULE*
> >  Jika di deklarasikan dengan statement Dim / Private
> > ( Dim NamaVariable as TiPeData )
> > akan berlaku dan dikenal di modul tsb ( di semua Prosedur yg berada
di
> > Module tsb)
> >
> >
> >
> >
> > On Sun, Mar 25, 2012 at 3:38 PM, Rara Wilis ra2wilis@... wrote:
> >
> >> halo...
> >> Ini kayaknya harus ngobrol mengenai : *Ruang Lingkup Berlakunya,
dan
> >> Umur VARIABLE*
> >> Kita akan membicarakan hal yg terjadi di satu workbook saja dulu
> >> ---------------- cut -------
> >>
> >
> >
> >
>

Kid
Reply | Threaded
Open this post in threaded view
|

Re: [belajar-excel] Re: Message box Ok Cancel

Kid
Administrator
Nah ini ada tambahan dari Pak Anton,
menggunakan fungsi Run
dengan syntax :
Run "namaprosedurnya"

Dalam pembahasan yang lalu, telah dikenalkan tentang Public dan Private.
Dengan karakteristik public dan private itu, maka dimungkinkan membuat
module yang nama-nama prosedur dan variabelnya antar module atau malah
antar object class yang sama.

Misal, ada 2 prosedur berkarakteristik private di module1 dan module5 yang
namanya sama yaitu Cetak
Maka dari module7 bisa dilakukan pemanggilan prosedur cetak secara
berurutan mulai dari cetak menurut proses di module1 diikuti cetak menurut
proses di module5 sebagai berikut :

'dimodule 7 ada prosedur ini
public sub CetakSemua()
       Run "module1.cetak"
       Run "module5.cetak"
end sub

Jadi penggunaan prosedur private yang ada dimodule lain adalah melalui
sebuah fungsi VBA bernama Run

Wassalam,
Kid.
On Tue, Mar 27, 2012 at 13:21, summonery <[hidden email]> wrote:

> **
>
>
> Moga-moga jadi bingung dan jadi punya imajinasi lain tentang variabel,
> public, private dsb, sehingga selalu muncul rasa ingin tahu lebih banyak
> lagi.
>
> Amiin...
>
> >> karakteristik Private
> -- prosedur dengan karakteristik private tidak dapat dipergunakan oleh
> siapapun selain pemiliknya (object tempat tinggalnya)
>
> Namun dengan memanggilnya dengan Run "NamaProsedurDiModuleYangLain" kita
> dapat menjalankan suatu prosedur lain yang berada di module yang berbeda
> meski prosedur yang dipanggil berkarasteristik private.
>
>
> >semoga bermanfaat
>
>
> --- In [hidden email], "Kid Mr." <mr.nmkid@...> wrote:
> >
> > Ikutan lagi....
> >
> > Dalam VB/VBA, mestinya sudah tahu bahwa ada kelompok-kelompok kelas.
> > Misal pada VBA Excel saja, ada kelompok di VBE (VB Editor)
> > 1. object dari kelasnya Excel seperti Sheet1, Sheet2, ThisWorkbook
> > 2. object dari kelasnya userform seperti UserForm1, UserForm2, dsb
> > 3. object dari kelasnya general module seperti Module1,Module2, dsb
> > 4. object dari kelasnya user class seperti Class1,class2, dsb
> >
> > Untuk awalan, fokus dulu pada no 1 sampai 3 saja.
> > No 1 dan 2, pada dasarnya adalah object-object yang pendiam dan
> penyendiri,
> > yang sering disebut private.
> > No 3, pada dasarnya adalah object yang suka bersosialisasi, jadi enak
> > diajak ngobrol yang sering disebut public.
> >
> > Sampai sini, sudah ada bayangan bahwa ada benda (object) yang memiliki
> > karakteristik private dan public.
> > Jadi, sebenarnya apa sih Public dan Private itu ? Apakah sekedar ruang
> > lingkup kerja ?
> > Kalau contoh diatas, maka yang tampak adalah private dan public itu
> > cenderung ke karakteristik sesuatu (object) dalam menyikapi
> lingkungannya.
> > Kalau begitu, apakah lingkungan dari contoh diatas ?
> > Lingkungannya adalah VBA Excel.
> > Maka, untuk memanfaatkan object itu, harus disertai memanggil namanya,
> > supaya si benda nengok dulu baru bisa diberi perintah.
> >
> > Contoh :
> > Untuk mengaktifkan sebuah userform, maka bunyinya :
> > *UserForm1 *Show
>
> > >> Memerintahkan melalui Excel (lingkungan) yang jadi bosnya UserForm1
> > sehingga tahu cara memerintah si userform1 untuk tampil keatas panggung.
> >
> > atau mau menggunakan range yang ada di sheet1 :
> > *sheet1*.range("x1:z9").activate
>
> > >> memerintah secara langsung kepada si sheet1 supaya memberi kesempatan
> > kepada pemanggil untuk mengaktifkan range x1:z9 yang dimiliki si sheet1.
> >
> > Untuk hal seperti ini akan terkait erat dengan yang namanya object dan
> > karakteristiknya. Tapi ndak usah dipedulikan, karena bahasannya kali ini
> > tentang private, public dan dim yang cenderung dikenal sebagai ruang
> > lingkup kerja.
> > Tapi, dari contoh diatas, tampak jelas bahwa penggunaan apapun yang
> > dimiliki si object, harus pakai manggil namanya dulu. Mau pakai rangenya
> > sheet1, harus panggil dulu namanya sheet1. Setelah nengok, baru bisa beri
> > perintah. Itulah karakteristik private.
> >
> > Untuk karakteristik public, ndak perlu pake panggil-panggil segala.
> >
> > Setelah tahu ada kelompok yang demikian, maka yang perlu diketahui
> > berikutnya adalah adanya bentuk-bentuk blok program yang sering disebut
> > routine atau prosedur.
> >
> > Prosedur ada yang jenisnya Sub atau Function (yang sering dipakai). Jadi
> > bukan Public Sub, Public Function, Private Sub, Private Function.
> > Masing-masing jenis prosedur, bisa diberi karakteristik respon terhadap
> > lingkungan jenis Private atau Public.
> > Dengan begitu, maka sering ditemui :
> > >> karakteristik Private
> > -- prosedur dengan karakteristik private tidak dapat dipergunakan oleh
> > siapapun selain pemiliknya (object tempat tinggalnya)
> > contoh 1 : (prosedur yang tinggal di sheet1, maka hanya bisa digunakan
> oleh
> > si sheet1 saja ~ bener-bener barang pribadinya si sheet1)
> > Private Sub Worksheet_Change(byval target as range)
> > yang sering dikenal sebagai prosedur event sub.
> > Disebut event karena prosedur ini juga akan aktif ketika ada kejadian
> > minimal sebuah cell di dalam worksheet yang mengalami pengubahan nilai.
> >
> > contoh 2 : (prosedur yang tinggal di module umum seperti module1 yang
> > karakterisk si module itu public, tetapi tetap saja gak bisa dipakai oleh
> > selain module1)
> > Private Sub PersiapanCetak( rngData as range , lStatus as long )
> >
> > >> karakteristik Public
> > Contoh 1 : (prosedur yang diletakkan di sheet1 misalnya berbunyi seperti
> > berikut ini)
> > Public Sub SetNilaiPesananSheetInput()
> > -- Prosedur ini diletakkan pada sebuah object sheet (misal di sheet1)
> yang
> > pada dasarnya berkarakteristik private.
> > -- Pemberian karakteristik public pada si prosedur, akan membuat prosedur
> > ini bisa digunakan oleh yang lainnya (misal oleh module1 atau userform1
> > dsb), selama yang mau make itu (module1 dsb itu) manggil yang punya dulu.
> >
> > Contoh lengkapnya begini deh :
> > di sheet1, tulis :
> > public sub ProsedurPunyanyaSheet1()
> > msgbox "Aku adalah prosedur karakteristik public di lokasi sheet1
> > yang berkarakteristik private"
> > end sub
> >
> > kemudian, di module1 (Insert Module kalau belum ada), tulis :
> > public sub PanggilProsedurDiSheet1Ahhh()
> > sheet1.ProsedurPunyanyaSheet1
> > end sub
> > jalankan prosedur PanggilProsedurDiSheet1Ahhh
> >
> > Jika tulisan sheet1. dihapus dari baris sheet1.ProsedurPunyanyaSheet1
> maka
> > si VBA akan protes.
> >
> > Contoh 2 : (pada sebuah module umum lainnya -- misal module2 -- insert
> > module kalau belum ada)
> > public sub PanggilPunyanyaModule1Ahh()
> > PanggilProsedurDiSheet1Ahhh
> > end sub
> > lalu jalankan.
> >
> > Akan tampak bahwa prosedur PanggilProsedurDiSheet1Ahhh yang diberi
> > karakterisik public dan tinggal di object module1 yang juga
> > karakteristiknya public, bisa dipanggil dan dipakai sewaktu-waktu.
> >
> >
> > Untuk jenis prosedur Function maka yang berubah adalah bentuk bloknya
> yang
> > tadinya sub jadi function disertai penetapan tipe data hasil dari
> function.
> > Baris End Sub akan jadi End Function.
> >
> > Setelah rada bingung campur sedikit mudeng tentang public dan private
> pada
> > sebuah benda seperti module atau form atau sheet, kemudian rada paham
> > tentang public dan private pada sebuah prosedur baik sub atau function,
> > maka mulailah cerita tentang public dan private pada sebuah variabel.
> >
> > Variabel juga bisa diberi karakteristik Public dan Private. Tapi, hanya
> > untuk variabel yang dideklarasikan diluar prosedur.
> > Untuk deklarasi variabel dalam sebuah prosedur, digunakan Dim.
> > Dim juga bisa digunakan untuk diluar prosedur, yang karakteristiknya akan
> > mirip dengan penggunaan Private. Tapi, sebaiknya tetap menggunakan
> Private
> > daripada Dim.
> >
> > Cara deklarasi secara umum :
> > karakteristiknya nama_variabelnya AS tipedatanya
> >
> > contoh : disebuah module umum bernama module1 (kalau belum ada module1,
> > lakukan Insert Module)
> > Option Explicit
> > Public rngKriteria as range
> > Public lNum AS Long
> > Private lRec AS Long
> >
> > Public Sub CetakFaktur()
> > Dim rngData as Range
> > ' ada baris perintah banyak disini, misal :
> > lNum = 1945
> > end sub
> >
> > Maka,
> > A. variabel rngKriteria dan lNum akan dapat dipergunakan secara langsung
> > oleh siapapun dimanapun berada oleh prosedur apa saja selama tidak ada
> > module umum yang mendeklarasikan sama seperti yang dideklarasikan oleh
> > module1 karena :
> > 1. module1 berkarakteristik Public
> > 2. variabel dideklarasi dengan karakteristik Public
> >
> > B. variabel lRec hanya dapat digunakan di module1 saja, pada seluruh
> > prosedurnya karena :
> > 1. variabel dideklarasi dengan karakteristik Private
> >
> > C. variabel rngData hanya dapat digunakan di prosedur CetakFaktur di
> > module1 saja. Prosedur lain, baik yang dalam module1 apalagi yang diluar
> > module1 tidak dapat menggunakannya karena :
> > 1. variabel dideklarasi dengan karakteristik Dim dalam sebuah prosedur.
> >
> >
> > Bagaimana jika di Sheet1 ada prosedur berikut berikut ini :
> >
> > Option Explicit
> >
> > 'ada prosedur untuk set nilai lnum juga
> > Public Sub SetVarLNumOlehSheet1()
> > lnum=1990
> > end sub
> >
> > Pertanyaannya, lNum yang mana yang diset oleh prosedur
> SetVarLNumOlehSheet1
> > ?
> > Tentu saja variabel lNum yang dideklarasi di Module1 di atas sana.
> >
> > Jika isi sheet1 diubah menjadi : (lihat bagian bold)
> > Option Explicit
> > *Public lNum AS Long*
>
> >
> > 'ada prosedur untuk set nilai lnum juga
> > Public Sub SetVarLNumOlehSheet1()
> > lnum=2012
> > end sub
> >
> > lNum yang mana yang diisi oleh prosedur SetVarLNumOlehSheet1 ?
> > Tentu saja lNum yang dideklarasikan di sheet1.
> > Lalu nilai lNum yang dideklarasikan di Module1 berapa nilainya ?
> > Jika prosedur CetakFaktur di module1 telah dijalankan, maka nilai lNum di
> > module1 adalah 1990.
> >
> > Dari 2 contoh diatas, tampak bahwa deklarasi variabel dengan
> karakteristik
> > Public di sebuah module umum (module1 dalam contoh), tidak serta merta
> > bekerja disemua tempat. Bagaimana cara pakai kedua variabel itu ?
> >
> > Misal dimodule2 (buat baru jika belum ada)
> > option explicit
> >
> > public sub SetSemuaLNumOlehMod2()
> > module1.lnum=100
> > sheet1.lnum=3000
> > *msgbox "LNum di module1 = " & lnum & vbcrlf & "LNum di sheet1 = " &
> > sheet1.lnum*
>
> > end sub
> >
> > Jadi, dengan memanggil secara spesifik pemilik variabelnya, varibel
> > berkarakteristik public bisa digunakan oleh pihak lain.
> > Tapi, *hati-hati dengan yang diwarna merah*. Disana ada proses
> memanfaatkan
>
> > nilai lnum tanpa memanggil pemiliknya.
> > Baris merah ini akan bekerja jika tidak ada module umum lainnya yang
> > mendeklarasikan Public lNum. Jika ada, maka akan error. Dan errornya bisa
> > dieliminir ketika bagian *& lNum* diganti menjadi *& module1.lnum*
>
> >
> > Jika ingin mencoba, silakan buat module baru (misal module3) yang diisi
> > dengan :
> > Option Explicit
> > Public lNum as Long
> >
> > Public Sub SetNilaiLNumDiMod3OlehMod3()
> > lNum=7500
> > end sub
> >
> > Baris lNum=7500 akan mengisi varibel lNum di module3 dengan 7500
> > Kemudian coba run prosedur SetSemuaLNumOlehMod2 yang ada di module2. Jika
> > error, ganti bagian *& lNum* diganti menjadi *& module1.lnum *dan run
> lagi.
>
> >
> > Dari beberapa contoh ini, maka bisa diketahui bahwa setiap object class
> > bisa mendeklarasikan variabel Public,Private, atau Dim, dan akan
> > diperlakukan sendiri-sendiri sesuai pendeklarator variabelnya. Object
> class
> > lainnya bisa menggunakan milik object class tertentu secara benar jika
> > disertai pemanggilan nama pendeklarator variabelnya.
> >
> > Secara umum, biasanya deklarasi sebuah variabel dilakukan untuk mewakili
> > satu varibel yang langsung ditentukan akan digunakan dimana saja.
> > Misal, di module1 dideklarasikan :
> > Public rngInput as range
> >
> > Maka diobject class manapun tidak akan ditemukan lagi deklarasi seperti
> > itu. Penggunaan rngInput bisa digunakan oleh object class lain (sheet1,
> > userform1, module1,dsb) secara langsung.
> >
> > Secara garis besar, menentukan variabel adalah tergantung intensitas
> > penggunaannya. Misal, rngdata yang merujuk ke Sheet7 di range A1:G19 akan
> > selalu digunakan disetiap proses yang prosedur prosesnya bisa ada di
> > sheet1, module3, userform5 dsb, maka cukup dideklarasikan di sebuah
> module
> > umum (misal module1) kemudian digunakan oleh semua prosedur.
> >
> > Jika ternyata ada prosedur yang butuh rngInput tapi dengan isi range
> > merujuk ke hal yang berbeda dengan prosedur lainnya yang menggunakan
> > rngInput, maka dibuatlah sebuah variabel baru, misal Public
> rngInputLainnya
> > as range
> > Begitu seterusnya.
> >
> > -----------------------
> >
> > Contoh :
> > Sheet1 dan sheet3 butuh bekerja dengan range yang ada di sheet bernama
> Data
> > (misal sheet7) mulai range A1 diseluruh blok data kontinyunya
> > (currentregion)
> >
> > Maka disebuah module umum (misal module1) ada bunyi :
> > Option Explicit
> > Public rngKu as range
> >
> > di sheet1 ada prosedur :
> > public sub DataNamaSaja()
> > set rngKu = sheet7.range("a1").currentregion
> > 'misal data nama adalah kolom B saja dan akan dicopy ke sheet13 mulai
> > range k1
> > rngku.resize(,1).offset(,1).copy sheet13.range("k1")
> > end sub
> >
> > di sheet3 ada prosedur :
> > public sub DataUmurSaja()
> > set rngKu = sheet7.range("a1").currentregion
> > 'misal data umur adalah kolom E saja dan akan dicopy ke sheet13 mulai
> > range j1
> > rngku.resize(,1).offset(,4).copy sheet13.range("j1")
> > end sub
> >
> > Pada kedua prosedur yang ada di masing-masing sheet tidak ada deklarasi
> > rngKu lagi bukan ?
> > Contoh seperti inilah yang sering disebut bahwa Public dan Private adalah
> > berkaitan dengan ruang lingkup variabel.
> >
> > ------------------------
> >
> > Jadi, Public dan Private bukan sekedar ruang lingkup variabel saja,
> tetapi
> > mencakup karakteristik akses pemakaian.
> > Hal ini berkaitan erat dengan cara komputer membaca sebuah data yang
> > melalui pointernya, bukan nama variabelnya. Tapi hal seperti pointer ini
> > ndak usah dipikirkan, biar jadi urusannya si komputer saja. ndak mumet
> kalo
> > mikirin pointer.
> >
> > Moga-moga jadi bingung dan jadi punya imajinasi lain tentang variabel,
> > public, private dsb, sehingga selalu muncul rasa ingin tahu lebih banyak
> > lagi.
> >
> > Wassalam,
> > Kid.
> >
> > On Sun, Mar 25, 2012 at 15:43, Rara Wilis ra2wilis@... wrote:
> >
> > > **
>
> > >
> > >
> > > maaf, koreksi ada yg salah fatal:
> > >
> > > tertulis
> > > *
> > > *
> > > *Lingkup Berlakunya VARIABLEs dan CONSTANTs*
>
> > >
> > > Variable ataupun Konstanta yg dideklarasikan pada level (di dalam
> sebuah)
> > > Prosedur
> > > Jika di deklarasikan dengan statement Dim / Private
> > > ( Dim NamaVariable as TiPeData )
> > > akan berlaku dan dikenal di modul tsb ( di semua Prosedur yg berada di
> > > Module tsb)
> > >
> > >
> > > seharusnya:
> > > *
> > > *
> > > *Lingkup Berlakunya VARIABLEs dan CONSTANTs*
>
> > >
> > > Variable ataupun Konstanta yg dideklarasikan pada level (di dalam
> sebuah)
> > > *MODULE*
>
> > > Jika di deklarasikan dengan statement Dim / Private
> > > ( Dim NamaVariable as TiPeData )
> > > akan berlaku dan dikenal di modul tsb ( di semua Prosedur yg berada di
> > > Module tsb)
> > >
> > >
> > >
> > >
> > > On Sun, Mar 25, 2012 at 3:38 PM, Rara Wilis ra2wilis@... wrote:
> > >
> > >> halo...
> > >> Ini kayaknya harus ngobrol mengenai : *Ruang Lingkup Berlakunya, dan
> > >> Umur VARIABLE*
>
> > >> Kita akan membicarakan hal yg terjadi di satu workbook saja dulu
> > >> ---------------- cut -------
> > >>
> > >
> > >
> > >
> >
>
>  
>