![]() |
![]() |
Lengkapi program tersebut dengan beberapa hal sebagai berikut :
1. txtCCode, maksimal pengetikkan 4 huruf, dan tidak boleh kurang dari 4 huruf, dan yang dapat diketik hanya digit (0 s/d 9).
Solusi :
A. Untuk membatasi jumlah pengetikkan maksimal 4 huruf, kita dapat menggunakan properti MaxLength pada picture box txtCCode yang diset menjadi 4.
B. Untuk memaksakan pengetikkan tidak boleh kurang dari 4 huruf, kita dapat melakukan koding pada event Validate kontrol txtCCode, yang perlu kita lakukan adalah memeriksa apakah txtCCode kosong atau tidak, jika tidak kosong kita periksa apakah panjangnya dibawah 4 huruf dengan menggunakan fungsi bantu Len(string), jika dibawah 4 huruf kita set argumen Cancel menjadi True yang artinya tidak dapat keluar dari kontrol.
Private Sub txtCCode_Validate(Cancel As Boolean) If Trim(txtCCode.Text) <> "" Then 'Jika tidak kosong If Len(txtCCode.Text) < 4 Then 'Jika panjang dibawah 4 huruf MsgBox "Kode Akses harus 4 digit", vbOKOnly + vbInformation, "Perhatian" Cancel = True 'Tidak boleh meninggalkan kontrol End If End If End Sub
C. Untuk membatasi huruf yang dapat diketik hanya digit (0 s/d 9) pada txtCCode, kita perlu melakukan koding terhadap event Keypress, dengan memeriksa isi argumen KeyAscii dan memanipulasinya.
Private Sub txtCCode_KeyPress(KeyAscii As Integer) If Not (Chr$(KeyAscii) Like "[0-9]" Or _ 'Jika yang ditekan bukan 0 s/d 9 KeyAscii = 8) Then 'atau backspace KeyAscii = 0 'Abaikan saja End If End Sub
2. txtNama, maksimal pengetikkan 30 huruf, dan huruf pertama setiap suku kata otomatis besar, misalnya Hendra Wijaya, Susan Dewichan.
Solusi :
A. Untuk solusi maksimal pengetikkan 30 huruf, dapat dilihat pada jawaban diatas.
B. Untuk mengubah setiap huruf pertama suku kata menjadi huruf besar mula-mula kita perlu membuat fungsi bantu proper :
Function Proper(x As String) Dim cRet As String 'Menampung hasil perubahan huruf perhuruf Dim lBesar As Boolean 'Flag untuk menandai huruf berikutnya huruf besar Dim i As Integer 'Variabel counter dari huruf 2 s/d selesai If Len(x) > 0 Then 'Jika x tidak kosong cRet = UCase$(Left(x, 1)) 'Buat huruf pertama jadi besar lBesar = False 'Huruf berikutnya huruf kecil For i = 2 To Len(x) 'Mulai dari huruf 2 s/d selesai If lBesar Then 'Jika lBesar cRet = cRet & UCase$(Mid$(x, i, 1)) 'Buat huruf tersebut jadi besar lBesar = False 'Huruf berikutnya huruf kecil Else cRet = cRet & LCase$(Mid$(x, i, 1)) 'Buat huruf tersebut jadi kecil End If If Mid$(x, i, 1) = " " Then 'Jika huruf tersebut adalah spasi lBesar = True 'Huruf berikutnya huruf besar End If Next i End If Proper = cRet 'Kembalikan hasil perubahan di cRet End Function
Kemudian kita gunakan fungsi Proper tersebut pada event Change pada txtNama, artinya setiap terjadi perubahan pada isi textbox, maka kita jalankan fungsi proper untuk menjamin tampilan.
Private Sub txtNama_Change() Dim i As Integer i = txtNama.SelStart 'Simpan posisi titik sisip txtNama.Text = Proper(txtNama.Text) txtNama.SelStart = i 'Kembalikan posisi titik sisip End Sub
3. txtEkstension, maksimal pengetikkan 3 huruf, dan yang dapat diketik hanya digit (0 s/d 9), dan nomor ekstension terkecil 100, terbesar 600.
Solusi :
A. Solusi 1 dan 2 lihat diatas.
B. Solusi untuk nomor ekstension terkecil 100, dan terbesar 600, kita lakukan pada event Validate
Private Sub txtEkstension_Validate(Cancel As Boolean) If Trim$(txtEkstension.Text) <> "" Then 'Jika tidak kosong If Len(txtEkstension.Text) < 3 Or _ 'Jika kurang dari 3 huruf atau txtEkstension.Text < "100" Or _ 'dibawah 100 atau txtEkstension.Text > "600" Then 'diatas 600 MsgBox "Ekstension mulai 100 s/d 600", vbOKOnly + vbInformation, "Perhatian" Cancel = True End If End If End Sub
4. Penekanan Enter dapat digunakan untuk berpindah antar textbox
Solusi :
Untuk melakukan hal ini kita perlu mengatur event keypress masing-masing kontrol sehingga menjadi :
Private Sub txtCCode_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then SendKeys "{tab}" ElseIf Not (Chr$(KeyAscii) Like "[0-9]" Or _ KeyAscii = 8) Then KeyAscii = 0 End If End Sub
Private Sub txtNama_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then SendKeys "{tab}" End If End Sub
Private Sub txtEkstension_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then SendKeys "{tab}" ElseIf Not (Chr$(KeyAscii) Like "[0-9]" Or _ KeyAscii = 8) Then KeyAscii = 0 End If End Sub
5. Option SLI, hanya bisa dipilih untuk ekstension 100 s/d 199, SLJJ, hanya dipilih untuk ekstension 200 s/d 299
Solusi :
Untuk memeriksa apakah suatu nomor ekstension dapat melakukan akses SLJJ maupun akses SLI, kita perlu memeriksanya pada event klik pada masing-masing option button.
Private Sub optSLI_Click() If txtEkstension.Text > "199" Then MsgBox "Ekstension tidak bisa akses SLI" optSLI.Value = False End If End Sub
Private Sub optSLJJ_Click() If txtEkstension.Text > "299" Then MsgBox "Ekstension tidak bisa akses SLJJ" optSLJJ.Value = False End If End Sub
6. txtCCode, txtNama, txtEkstension, dan Akses tidak boleh kosong.
Solusi :
Pemeriksaan terhadap data txtCCode, txtNama dan txtEkstension tidak boleh kosong kita lakukan pada bagian Update, artinya jika salah satu kosong kita tampilkan kotak pesan dan proses Update dibatalkan.
Private Sub cmdUpdate_Click() If Aksi = flAdd Or Aksi = flEdit Then 'Kalau update dilakukan karena Edit 'atau Add If Trim$(txtCCode.Text) = "" Then 'Jika txtCCode kosong MsgBox "Kode Akses tidak bisa kosong" 'Tampil pesan txtCCode.SetFocus 'Kembalikan fokus ke txtCCode Exit Sub 'Keluar dari sub End If If Trim$(txtNama.Text) = "" Then MsgBox "Nama tidak bisa kosong" txtNama.SetFocus Exit Sub End If If Trim$(txtEkstension.Text) = "" Then MsgBox "Ekstension tidak bisa kosong" txtEkstension.SetFocus Exit Sub End If If Not (optLocal.Value Or optSLJJ.Value Or optSLI.Value) Then MsgBox "Anda harus pilih salah satu option" Exit Sub End If If Aksi = flAdd Then JlhRec = JlhRec + 1 Posisi = JlhRec End If DatPemakai.CCode = txtCCode.Text DatPemakai.nama = txtNama.Text DatPemakai.Ekstension = txtEkstension.Text DatPemakai.Local = optLocal.Value DatPemakai.SLJJ = optSLJJ.Value DatPemakai.SLI = optSLI.Value Put #1, Posisi, DatPemakai Call Kunci End If End Sub