19 February 2013

VB6: Format Number pada Textbox

Lanjut dari http://rani-irsan.blogspot.com/2013/02/vb6-input-numeric-only.html

Langkah selanjutnya kita ingin membuat pemisah ribuan dan 2 angka dibelakang koma dengan tetap menjaga nilai yang ada di textbox tetap berupa numerik.
(catatan: format international 1,000.00)

Tambahkan 1 control lagi untuk mendemonstrasikan event lost focus.


Code berikut untuk mengisi nilai Text1, agar nilai nya berupa karakter numerik.
Private Sub Form_Load()
Text1.Text = 0
Text1.Text = Format(Text1.Text, "#,##0.#0")
Text1.SelStart = Len(Text1.Text)
End Sub


Code berikut untuk mengubah format numerik saat event lost focus (kehilangan fokus)
Private Sub Text1_LostFocus()
Text1.Text = Format(Text1.Text, "#,##0.#0")
Text1.SelStart = Len(Text1.Text)
End Sub


Code berikut untuk memastikan input nilai numerik (double) saat event got focus (mendapatkan fokus)
Private Sub Text1_GotFocus()
Text1.Text = CDbl(Text1.Text)
Text1.SelStart = Len(Text1.Text)
End Sub


Code berikut untuk memastikan perubahan data selalu bernilai numerik, terutama jika data tidak diinput dengan mengetik, misal: copy paste.
Private Sub Text1_Change()
If Not IsNumeric(Text1.Text) Then
   Text1.Text = 0
   Text1.SelStart = Len(Text1.Text)
   Exit Sub
End If
End Sub


That's all for today, semoga bermanfaat.

Click here if you like this article.


24 comments:

Yudhistira Adhi said...

saya udah coba dan hasil bisa dengan format tersebut, tapi pas saya coba save jadi error, bagaimana ya solusinya? tolong kasih skripnya kalo ada. Thnks

rani irsan said...

Saat menggunakan nilai dalam textbox untuk proses lainnya (contoh save) yang harus berupa nilai numerik, maka harus dipastikan bahwa nilai tersebut bernilai numerik lagi. Karena format dengan koma dan titik nilai textbox akan terbaca sebagai string.
Berikut contoh codenya:
Private Sub cmdSave_Click()
Dim dblNilai As Double
dblNilai = CDbl(Text1.Text)
'gunakan dblNilai untuk proses input
End Sub

Dita Marsal said...

ass bu Rani terimakasih atas postingannya...
saya mau taya ni kenapaya disaat text yang berformat apabila kita jumlahkan (text1 + text2) itu hasilnya tidak sempurna,contoh:

Private Sub Text5_Change()
If Text3 <> "" Then
x = Text4

Text3.Text = Format(Text3.Text, "###,##0")
Text3.SelStart = Len(Text3.Text)
X = Format(Text1.Text, "###,##0") + Format(Text2.Text, "###,##0")

Text4 = X
Text4.Text = Format(Text4.Text, "###,##0")

End If
End Sub

jika nila dari text1 = 3,500 dan text2= 4,000 maka hasilnya akan seperti ini = 35,004,000 seharus nya jadi 6,500 tolong solusinya bu apa ada yang kurang dengan koding saya...

rani irsan said...

karena setelah di format tipe data berubah jadi string.
jadi klo mau dipakai penjumlahan dikonversi ke tipe data numerik misal nya tipe data double. untuk menampilkan baru diformat ulang.

Private Sub Text5_Change()
If Text3 <> "" Then
x = Text4

Text3.Text = Format(Text3.Text, "###,##0")
Text3.SelStart = Len(Text3.Text)
X = cdbl(Text1.Text) + cdbl(Text2.Text) 'Aku ngubah disini

Text4 = X
Text4.Text = Format(Text4.Text, "###,##0")

End If
End Sub

mungkin ini bisa jadi referensi:
http://rani-irsan.blogspot.com/2014/07/vb6-penggabungan-string.html
http://rani-irsan.blogspot.com/2014/07/vb6-fungsi-konversi-tipe-data.html

Dita Marsal said...

ok Bu trim's atas penjelasan nya nanti saya coba ya.....
o ya kalo koding yang saya gunakan itu kalo untuk pengurangan gak masalah normal tapi kalo untuk penjumlahan kok laen ya emang cara kerja kurang sama tambah itu beda ya??

rani irsan said...

sama-sama pa, silahkan dicoba...

karena selain untuk penjumlahan tanda + juga dipakai concatenation pada tipe data string

INDO DATA CODE OFFICIAL said...

Terima kasih, sudah share

Fadly said...
This comment has been removed by the author.
Rio Putra said...

Bu Bagaimana menampilkan currency di textbox.trima kasih

rani irsan said...

pake format aja.
Contoh:
Format(Text1.Text, "Rp #,###")

Mulia said...

Apa beda
Format(Text1.Text, "#,###")
dengan
Format(Text1.Text, "###,##0")

yang mana yang benar?

rani irsan said...

@mulia: mana yang benar tergantung keperluannya gimana.
klo yang diakhiri dengan "#" saat text bernilai 0 tampilannya akan kosong
sementara klo diakhiri dengan "0" saat text bernilai 0, textbox akan menampilkan angka 0

hijram mahjura said...

di textbox saya isi 2.5 kenapa di tabel tertulis 25 ya bu?

Heru said...

ass bu..
saya mau textbox yg saya buat setiap diketik angka langsung berubah,
misal saya ketik 6500 maka otomatis textbox berubah menjadi 6,000.00,
jadi setiap diketik dia brubah otomatis.
bagaimana ya bu?

rani irsan said...

@hijram: mesti di cek code nya kenapa bisa gitu.

@heru: 6500 jadi 6000? beda 500? :D
klo format pengen berubah langsung pas setiap ketik berarti pindahin kode yang ada di event Text1_LostFocus() ke Text1_Change()

hijram mahjura said...

di textbox saya isi 2.5 kenapa di tabel tertulis 25 ya bu?
@hijram: mesti di cek code nya kenapa bisa gitu.
codingnya panjang apa ya di share, di sini mbak?

rani irsan said...

@hijram: email paling

Ferrysagogo Gogo said...

cerdas dunia akhirat, makasee

Ferrysagogo Gogo said...

cerdas dunia akhirat, makasee

rani irsan said...

aamiin...

Fadjar Suryono said...

di textbox saya isi 387.40...jadinya 38740 tapi klo saya isi 387,40 benar, tp masalhnya mysql mendeteksi setelah koma dianggap field lain...saya coba pakai tanda kurung " ( ) " ndak mau juga...ada yg punya solusi...

rani irsan said...

di query nya? blom terlalu ngeh sama code nya... klo query coba pakai petik 1 tapi mestinya mysql ngedeteksi titik sebagai koma sih default nya

zainul Duta bangkit said...

kak klo 1 + 0,123 hasilnya 1,123 gmn tuh scriptnya saya menggunakan val(txt1....... hasil malah cuma 1 g bisa menambahkan dengan 0,123

rani irsan said...

jangan pake val, pake csng. trus hasilnya baru di format #,##0.##0 buat 3 angka di belakang koma