Jika errornya adalah overflow, berarti ada sesuatu yang melebihi batasnya.
Nah apa yang melebihi batas tersebut tidak tampak secara langsung dari
script mas Dwint.
1. Kalau script tersebut di salin ke sebuah workbook baru dan cell B19
diisi Hard Cover atau cell B20 diisi YA kira-kira muncul error gak ya ?
2. Coba juga jika sebelum baris IF pertama disisipi :
application.enableevents=false
kemudian setelah endif terakhir disisipi :
application.enableevents=true
properti enableevents akan meng-turn on/off-kan ijin terpicunya dan
dijalankannya prosedur-prosedur event.
Coba perhatikan di script mas Dwint. Setelah proses cek, maka ada baris
perintah untuk mengubah nilai sebuah cell.
Hal ini akan memicu dijalankannya prosedur event worksheet change akibat
cell yang berubah nilainya. Padahal yang mengubah adalah prosedur event
juga.
Jadi, ketika cell B20 diubah user isinya dari kata Tidak menjadi Ya, maka
prosedur event change dijalankan dengan target berisi cell B20.
Ketika event ini diproses, ada sebuah perintah mengubah nilai cell B24.
Maka dengan berubahnya nilai di B24, event change jalan lagi tapi dengan
target berisi cell B24. Padahal event change yang tadi belum selesai
dikerjakan.
Tentang prosedur event worksheet change milik mas Dwint.
Tampaknya mas Dwint ingin melakukan pengecekan terhadap 2 cells, yaitu
terhadap isi cell B19 atau cell B20.
Perlakuan atas berubahnya nilai di B19 berbeda dengan berubahnya nilai B20.
Coba susun antara lain sebagai berikut :
Private Sub Worksheet_Change(ByVal Target As Range)
application.enableevents=false
If Target.Cells.Count = 1 Then
If Target.Column = 2 Then
if Target.Row = 19 then
If Target.Value = "Hard Cover" Then
Range("B22:B23").Value = "Ya"
Else
Range("B22:B23").Value = "Tidak"
End If
elseif Target.Row = 20 then
If Target.Value = "Ya" Then
Range("B24").Value = "Ya"
Else
Range("B24").Value = "Tidak"
End If
End If
End If
End If
application.enableevents=true
End Sub
Karena object range bernama target digunakan berulang kali, maka bisa
memanfaatkan klausa With, dan seluruh kata target bisa dihapus
(langsung pakai titik saja -- contoh untuk baris pertama -- terapkan untuk
kata target lainnya di baris lainnya)
with target
If .Cells.Count = 1 Then
'baris lainnya
end with
Bisa juga menggunakan blok kondisi Select Case .... End Select
Private Sub Worksheet_Change(ByVal Target As Range)
application.enableevents=false
with target
If .Cells.Count = 1 Then
If .Column = 2 Then
select case .Row
case 19
If .Value = "Hard Cover" Then
Range("B22:B23").Value = "Ya"
Else
Range("B22:B23").Value = "Tidak"
End If
case 20
If .Value = "Ya" Then
Range("B24").Value = "Ya"
Else
Range("B24").Value = "Tidak"
End If
End select
End If
End If
end with
application.enableevents=true
End Sub
Proses perbandingan seperti : (yang merah)
If Target.Value = "Ya" Then
bisa jadi memicu error runtime karena type mismatch (kalau gak salah error
runtime 13) ketika nilai dalam object range bernama target berupa errorvalue
Tapi untungnya jarang user input berupa nilai error value kan... (kasus ini
memang yang dibandingkan adalah hasil input user di target)
Ketika perbandingan dilakukan terhadap sebuah hasil formula di cell lain,
maka error tersebut bisa mungkin muncul.
Salah satu solusinya adalah dengan menyusun formula dalam worksheet yang
tidak menghasilkan error value.
Wassalam,
Kid.
2012/8/30 dwint ruswanto <[email protected]>
> **
>
>
> assalamu'alaikum,
>
> para master yang saya hormati,
>
> saya membuat event change terhadap suatu cell, pada saat *cell taget
> hanya 1* tidak timbul masalah, tetapi saat saya menambah 1 cell target
> lagi maka timbul Error,
>
> berikut codingnya
>
> Private Sub Worksheet_Change(ByVal Target As Range)
> If Target.Cells.Count = 1 Then
> If Target.Row = 19 And Target.Column = 2 Then
> If Target.Value = "Hard Cover" Then
> Range("B22:B23").Value = "Ya"
> Else
> Range("B22:B23").Value = "Tidak"
> End If
> End If
> End If
>
> If Target.Cells.Count = 1 Then
> If Target.Row = 20 And Target.Column = 2 Then
> If Target.Value = "Ya" Then
> Range("B24").Value = "Ya"
> Else
> Range("B24").Value = "Tidak"
> End If
> End If
> End If
> End Sub
>
> di mana letak kesalahan yang harus saya perbaiki?
>
> wassalam,
>
> -dwint-
>
>
>