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.


Post a Comment

51 Comments

Unknown 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 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
Unknown 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 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
Unknown 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 said…
sama-sama pa, silahkan dicoba...

karena selain untuk penjumlahan tanda + juga dipakai concatenation pada tipe data string
Fadly said…
This comment has been removed by the author.
Unknown said…
Bu Bagaimana menampilkan currency di textbox.trima kasih
rani 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 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
yohimato reload 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 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()
yohimato reload 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 said…
@hijram: email paling
Ferry said…
cerdas dunia akhirat, makasee
Ferry said…
cerdas dunia akhirat, makasee
Unknown 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 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 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 said…
jangan pake val, pake csng. trus hasilnya baru di format #,##0.##0 buat 3 angka di belakang koma
lazzuardi said…
Maaf bu rani ketika saya hapus angka di depan koma malah error bu itu knp yah bu?
rani said…
di artikel ini pemisah koma tidak ditampilkan saat mengedit text makanya ditambahkan code pada event berikut:
Private Sub Text1_GotFocus()
Text1.Text = CDbl(Text1.Text)
Text1.SelStart = Len(Text1.Text)
End Sub

sudah ditambahkan?

dan klo angka di depan koma dihapus format numerik nya tidak valid lagi, jadi ya error.
Unknown said…
bu boleh bertanya untuk tugas kuliah saya
jadi saya dapet tugas buat tanda operasi koma setelah saya bisa tp saya ada trouble dan ada tugas lagi
gimana cara agar input koma dalam kalkulator cukup sekali contoh misal
saya sudah input 0.12 tapi ketika saya klik koma masih bisa keinput 0.12.
bagaiman caranya ilangin input yang kedua koma tersebut

If TombolOperasiSudahDitekan = 0 Then
If display.Text = 0 Then
display.Text = 0
Else
AngkaDigitPertama = 1
display.Text = display.Text & "."
End If
If AngkaDigitPertama = 0 Then display.Text = display.Text & "."

Else
If display2.Text = 0 Then
display2.Text = 0
Else
AngkaDigitPertama = 1
display2.Text = display.Text & "."
End If
If AngkaDigitPertama = 0 Then display2.Text = display2.Text & "."

End If
End Sub

ini codeing yang saya buat apakah ada tambahan buat ngilangin input koma yang kedua
rani said…
@Rachel Egi: coba lihat di artikel
http://rani-irsan.blogspot.co.id/2013/02/vb6-input-numeric-only.html
pada event textbox keypress
Case 46
If InStr(Text1.Text, ".") <> 0 Then KeyAscii = 0

bagian tersebut untuk mencegah 2 koma (yg dalam program berupa titik <.>) untuk diinputkan ke dalam textbox
Unknown said…
ibuk saya binggung . saya taruh bapada bagian mana yang di koding koma saya
Unknown said…
boleh ditoturialkan di koding koma saya seperti ini kok ttp koma kedua masih bisa input yah buk
Private Sub TombolKoma_Click()
If TombolOperasiSudahDitekan = 0 Then
If display.Text = 0 Then
display.Text = 0
Else
AngkaDigitPertama = 1
display.Text = display.Text & "."
If InStr(display.Text, ".") <> 0 Then KeyAscii = 0
End If
If AngkaDigitPertama = 0 Then display.Text = display.Text & "."

Else
If display2.Text = 0 Then
display2.Text = 0
Else
AngkaDigitPertama = 1
display2.Text = display.Text & "."
End If
If AngkaDigitPertama = 0 Then display2.Text = display2.Text & "."

rani said…
koq di button click? di tutorial kan disimpan nya di event nya textbox
Unknown said…
itu taruhnya dimananya yah buk saya binggung
bneran binggung ?
trs di generalnya perlu ditambahkan atau enggak ?
rani said…
di event textbox yang nama nya keypress. Maaf sebelumnya tau kan klo tiap control di VB punya event2?
http://rani-irsan.blogspot.co.id/2014/07/vb6-pengunaan-event-property-method.html
Unknown said…
itu didalam buttom koma apa didalam displaynya yah buk
Unknown said…
bearti pada buttom kliknya diganti keypress tapi bahasa pemogramanya tetap punya saya apa seperti tutorial ibuk di web ini http://rani-irsan.blogspot.co.id/2013/02/vb6-input-numeric-only.html
Unknown said…
iya buk maaf baru belajar dan baru tau klo tiap2 control vb punya event saya teknik perkapalan dan asing membuat bahasa pemograman heheheh, jadi benar benar binggung
rani said…
hi rachel klo saran rani sih ikut code yang rani bikin aja di masing2 textbox, misal nya nama textbox nya textbox1 maka nama event nya textbox1_keypress.
trus tentang jurusan kuliah no worries kayak nya, saya juga teknik industri koq ^_^
bukan informatika ato komputer
Unknown said…
boleh minta email gak buk.. atau apapun yang bisa komunikasi intens
soalnya kadang kami sekelas itu binggung soal bahasa pemograman ini.
kl misalnya saya ganti keypress itu ngubah pemograman yang lain tidak
Unknown said…
masih keinput buk , koma yang kedua sudah saya coba
rani said…
hi rachel,
yang harus dipastiin pertama code VB disini pakai regional english USA dimana koma sebagai titik dan titik sebagai koma. misalkan sepuluh ribu koma dua lima maka ditulis 10,000.25.
klo kmu gimana?
Unknown said…
iya buk udah ..,, tapi klo misalnya gak pake event text boxnnya keyprees gitu ada cara lain gak buk buat ngilangin input koma yang kedua
Tri joko said…
Sore buk, maaf saya mau bikin tampilan di text box, perkalian dan pembagian, supaya tampilam text box nya bisa muncul koma dan titik pada ribuan gmn ya kodingnya, misal 25,55 x 1.000 = 25.550
Dan misal 25.550 : 1.000 = 25,55
Menggunakan 3 textbox ( txtnilai1, txtnilai2, txthasil) terimakasih sebelumnya.
Tri.joko3838@gmail.com
Terimakasih bu, saya baru di vb6, barangkali ibu ada cp yg bisa ditinggalkan untuk bisa saya hubungi?
rani said…
@tri joko:
seperti yang dijelaskan di artikel jika ingin menampilkan format nomor dengan fungsi format.
Text1.Text = Format(Text1.Text, "#,##0.#0")

Tetapi format seperti diatas berpotensi error jika digunakan untuk perhitungan matematis jadi sebelum masuk ke rumus dikonversi dulu aja.
Contoh:
Text3.Text = CDbl(Text1.Text) * CDbl(Text3.Text)

@rikky mahesa: comment aja di artikel yang bersangkutan klo ada pertanyaan.
Unknown said…
Minta tolong boleh?
Saya sedang buat aplikasi price list ongkos kirim barang yang harganya tergantung berat barang,
Ada 4 kelas harga, 1-10, 11-50, 51-99 dan 》 99.

Aplikasi berjalan normal kecuali kenapa ya pas input harga untuk 208 selalu dibaca seperti angka 20. Jadi aplikasi hanya akurat sampai 109, selebihnya hanya dibaca 2 digit pertama, mohon bantuannya
Agus Sudaryanto said…
Malam Buk ,saya mau bertanya ni , saya lgi ada prablem di program saya . masalah penjumlahan bilangan desimal , banyak angka di belakang koma . Ketika program saya berhasil di jalan kan. Tapi hasilnya tidak sesuai dengan hitungan manual buk.beda jumlah banyaknya angka di belakang koma . Gimana caranya agar program saya hasilnya sesuai dengan hitungan manual buk.?
rani said…
@Indra Irawan: Mesti dilihat dulu code nya, supaya bisa dicek kenapa hanya 2 digit yang terbaca.

@Agus Sudaryanto: Tidak sesuainya gimana saya belum ada gambaran klo ga lihat code nya.

Untuk @Indra & @Agus, perlu diingat format numerik decimal yang dipakai di VB english USA.
Jadi penggunaan koma itu pakai titik 1/2 = 0.5
Sebaliknya pemisah angka ribuan memakai koma 1000 -> 1,000

Semoga bisa jadi sedikit pencerahan. Happy coding!
irvan said…
saya mau nanya , saya lg nyoba perhitungan tp dgn format rupiah. saya sudah coba pakai "CDbl" tp ttp gk bisa. ini coding saya:

Private Sub Command1_Click()
Text1.Text = Format(Text1.Text, "Rp ###,##0")
Text3.Text = CDbl(Text1.Text) + CDbl(Text2.Text)
End Sub

mohon bantuannya saya salah dimananya?
rani said…
@irvan: di "Rp " (Rp dan spasi nya harus dihilangkan sebelum CDbl

Text3.Text = CDbl(Replace(Text1.Text, "Rp ", "")) + CDbl(Text2.Text)

Text2.Text juga harus diperlakukan sama pakai replace klo memuat "Rp "
irfan said…
mo tanya : misal paste text kek gini "dfg5543" di texbox nya maka yg tampil cuma angka saja bisa ga ya buk...?
rani said…
@irfan harusnya ga bisa, karena sudah dihandle di event Text1_Change pakai fungsi isnumeric.