berhubung ada beberapa rekan yg menanyakan via
japri, mengenai
kelanjutan "program" Acak
Undi Arisan yg dulu pernah di posted ke milis,
dengan pertanyaan / permintaannya:
apakah tidak bisa dibuat tombol
untuk menSTOP pengacakan secara
tiba-tiba ?
"menghentikan looping dengan tombol kapan
saja kita mau" sudah siti
coba, tapi ndak pernah berhasil, karena sementara
macro berjalan
tombol-tombol bikinan sendiri tidak bereaksi saat
di-klik.
jadi mohon bantuan teman-teman bagaimana cara paling baik / lazim?
Selain dengan tombol, sebetulnya kita dapat
memanfaatkan tombol ESCAPE
sebagai pengganti keinginan di atas.
Sementara ada macro sedang RUN, bila tombol
Escape ditekan, dia akan
menginterupsi jalannya makro, menawarkan apakah
macro mau dilanjutkan
atau mau dihentikan.
Tampilan msgBox seperti itu tentunya "bikin malu"
pembuat macronya...
Tetapi interupsi seperti itu sebetulnya dapat
dimanfaatkan untuk menghentikan
looping dengan mulus, tanpa menampilkan msgBox
"malu-malu-in" tadi.
Penekanan tombol Escape, menghasilkan Error #
18.
Dengan bekal itu kita dapat memasang jebakan,
kira-kira seperti ini:
i
= 1
On Error GoTo STOPLoop
Application.EnableCancelKey =
xlErrorHandler
Do ' perulangan
pengacakan data
For x = 1 To
nRow
Randomize
y = Int(Rnd *
nRow) + 1
temp =
DAFACAK.Cells(x, 1)
DafACAK.Cells(x, 1) = DafACAK.Cells(y,
1)
DafACAK.Cells(y, 1) =
temp
Range("E6")
= temp
Next
x
i = i + 1
STOPLoop:
If Err = 18
Then i = 1000 + 1
Loop Until i >= 1000
prinsipnya:
perulangan diberi batas counter yg cukup tinggi,
misal 1000.
KALAU tiba-tiba terjadi penekanan ESC (yg
menerbitkan Err = 18 ),
kita sudah siapkan instruksi : Nilai Batas counter diberi nilai MAXnya
(dalam contoh ini = 1001)
yang menyebabkan looping berhenti
dengan terhormat, yaitu
tunduk kepada syarat yg ada, bukan
oleh
msgBox yg "bikin malu" itu.
Anehnya: bila kita gunakan CommandButton yg
diberi macro dengan
logika yg persis sama, kok ndak mau STOP, kenapa
ya ?
Contoh terlampir, walaupun nyeTOPnya
dengan [ESC] tetapi bisa buat
mengundi arisan, yang menang jangan lupa traktir
baso ya...
kindest regards,
siti Vi.