Ada 3 (tiga) hal yang perlu diperhatikan pada saat kita melakukan hal tersebut diatas, yaitu pada saat event GotFocus, KeyPress dan LostFocus.
1. GotFocus
Pada saat event GotFocus komponen tersebut yang dilakukan adalah mengembalikan nilai asli dari angka dan membebaskan format pemisah ribuan yang ada, misalkan data 1,234,567 harus dirubah menjadi 1234567.2. KeyPress
Pada saat event KeyPress komponen tersebut yang dilakukan adalah menyaring data input dari keyboard yang bisa digunakan, yaitu angka dan titik desimal. Untuk melakukan hal tersebut kita buat sebuah fungsi yang ditulis dalam Module yang akan menyeleksi data input, jika tidak sesuai validasi data, maka karakter yang diinput dibatalkan. Ada 2 fungsi yang saya buat yaitu untuk Integer dan Desimal.3. LostFocus
Pada saat event LostFocus komponen tersebut yang dilakukan adalah menampilkan data dengan format numeric yang dikehendaki. Misalkan "###,##0" atau "###,##0.00". Sebelum data diformat terlebih dahulu data harus dibebaskan dari format permisah yang ada.Berikut contoh code seperti contoh form diatas dengan 2 komponen Textbox Stok Akhir dan Harga Jual:
Option Explicit
Private Sub txtHargaJual_GotFocus()
txtHargaJual.Text = AmbilDataNumeric(txtHargaJual.Text)
txtHargaJual.SelStart = 0
txtHargaJual.SelLength = Len(Trim(txtHargaJual.Text))
End Sub
Private Sub txtHargaJual_KeyPress(KeyAscii As Integer)
ValidasiInteger KeyAscii, txtHargaJual
End Sub
Private Sub txtHargaJual_LostFocus()
txtHargaJual.Text = Format(AmbilDataNumeric(txtHargaJual.Text), "###,##0")
End Sub
Private Sub txtStokAkhir_GotFocus()
txtStokAkhir.Text = AmbilDataNumeric(txtStokAkhir.Text)
txtStokAkhir.SelStart = 0
txtStokAkhir.SelLength = Len(Trim(txtStokAkhir.Text))
End Sub
Private Sub txtStokAkhir_KeyPress(KeyAscii As Integer)
ValidasiDecimal KeyAscii, txtStokAkhir
End Sub
Private Sub txtStokAkhir_LostFocus()
txtStokAkhir.Text = Format(AmbilDataNumeric(txtStokAkhir.Text), "###,##0.00")
End Sub
Untuk contoh Fungsi validasi desimal dan integer serta fungsi membebaskan data dari format ribuan yang ditulis dalam mobule adalah sebagai berikut:
Option Explicit
'-------------------------------------------------
' Ambil Data Dalam Format Numeric/Angka
'-------------------------------------------------
Public Function AmbilDataNumeric(cData As String, Optional nPanjang As Integer) As String
If IsNull(nPanjang) Then nPanjang = 15
AmbilDataNumeric = Trim(Format(cData, String(nPanjang, 15)))
End Function
'-------------------------------------------------
' Validasi Input Untuk Tipe Desimal
'-------------------------------------------------
Public Sub ValidasiDecimal(ByRef KeyAscii, TextObject As Object)
If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> 8 And Chr(KeyAscii) <> "." And Chr(KeyAscii) <> "-" Then
KeyAscii = 0
Else
If Chr(KeyAscii) = "." Then
If InStr(TextObject.Text, ".") <> 0 Then
KeyAscii = 0
End If
End If
If Chr(KeyAscii) = "-" Then
If InStr(TextObject.Text, "-") <> 0 Then
KeyAscii = 0
End If
End If
End If
End Sub
'-------------------------------------------------
' Validasi Input Untuk Tipe Integer
'-------------------------------------------------
Public Sub ValidasiInteger(ByRef KeyAscii, TextObject As Object)
If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> 8 And Chr(KeyAscii) <> "-" Then
KeyAscii = 0
Else
If Chr(KeyAscii) = "-" Then
If InStr(TextObject.Text, "-") <> 0 Then
KeyAscii = 0
End If
End If
End If
End Sub
Untuk contoh program dengan penjelasan diatas, anda dapat download source code disini. Semoga artikel ini bermanfaat bagi anda.
Daftarkan email anda disini untuk berlangganan artikel kodiing
ConversionConversion EmoticonEmoticon