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.


41 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

Lazzuardi Fajar Latief said...

Maaf bu rani ketika saya hapus angka di depan koma malah error bu itu knp yah bu?

rani irsan 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.

Rachel Egi 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 irsan 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

Rachel Egi said...

ibuk saya binggung . saya taruh bapada bagian mana yang di koding koma saya

Rachel Egi 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 irsan said...

koq di button click? di tutorial kan disimpan nya di event nya textbox

Rachel Egi said...

itu taruhnya dimananya yah buk saya binggung
bneran binggung ?
trs di generalnya perlu ditambahkan atau enggak ?

rani irsan 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

Rachel Egi said...

itu didalam buttom koma apa didalam displaynya yah buk

Rachel Egi 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

Rachel Egi 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 irsan 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

Rachel Egi 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

Rachel Egi said...

masih keinput buk , koma yang kedua sudah saya coba

rani irsan 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?

Rachel Egi 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