[Access] Hỏi về tính và tách giá trị số thành nhiều phần, mỗi phần 3 ký số (3 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

bigpiger

Thành viên mới
Tham gia
20/3/09
Bài viết
28
Được thích
0
ACE xem tiếp file mình gửi nhờ test dùm, sao mình nhân hai dòng mà không được, và cho mình hỏi làm thế nào để ghi mới, xóa và in
 

File đính kèm

Lần chỉnh sửa cuối:
1. Bạn dùng hàm Text và Rept của Excel nên nó hổng chịu.
2. Bạn gán giá trị bằng công thức trực tiếp vào textbox, không hay, vì nó tính toán trên 1 textbox khác, mà text box khác chưa có gì nên không tính được
3. Công thức của bạn dựa trên sự suy luận tính toán sai bét
4. Bán gán dấu = và 1 công thức vào 1 sự kiện, là hoàn toàn sai.

Làm lại cho bạn với loại tiền 500.000 đồng polyme, đặt tên lại textbox, viết lại sự kiện, xoá data nguồn.

PHP:
Private Sub so500_AfterUpdate()
tt500 = [loai500] * [So500]
ln = Len(Str(tt500))

    If ln > 9 Then
        kq5001 = Left(Str(tt500), Len(Str(tt500)) - 9)
        kq5002 = Mid(Str(tt500), Len(Str(tt500)) - 8, 3)
        kq5003 = Mid(Str(tt500), Len(Str(tt500)) - 5, 3)
    Else
        If ln > 6 Then
            kq5001 = ""
            kq5002 = Left(Str(tt500), Len(Str(tt500)) - 6)
            kq5003 = Mid(Str(tt500), Len(Str(tt500)) - 5, 3)
        Else
            If ln > 3 Then
                kq5001 = ""
                kq5002 = ""
                kq5003 = Left(Str(tt500), Len(Str(tt500)) - 3)
            End If
        End If
    End If
    kq5004 = "000"
    Tongtien = Tinhtong
    Bangchu = SayUNI(Tinhtong, 1, 0)
End Sub
PHP:
Function Tinhtong()
Tinhtong = tt500 + tt200p + tt200 + tt100p + tt100 + tt50p + tt50 + _
tt20p + tt20 + tt10p + tt10 + tt5 + tt5k + tt2 + tt2k + tt1 + tt1k + _
tt05 + tt05k + tt02 + tt02k + tt01
End Function
PHP:
Sub EraseTT()
tt500 = 0: tt200p = 0: tt200 = 0:  tt100p = 0:  tt100 = 0:  tt50p = 0: tt50 = 0
tt20p = 0: tt20 = 0: tt10p = 0: tt10 = 0:  tt5 = 0:  tt5k = 0:  tt2 = 0:  tt2k = 0:  tt1 = 0:  tt1k = 0
tt05 = 0: tt05k = 0: tt02 = 0: tt02k = 0: tt01 = 0
End Sub

Các loại tiền khác bạn làm tương tự.

Tạo 1 function tính ô tổng tiền.
Tạo 1 module, trong đó có hàm đọc số, đọc số thành chữ trong ô "bằng chữ" luôn.

Ghi chú:
Khi làm các loại tiền khác ghi nhớ:
Đã khai báo biến:
PHP:
Public tt500 As Double, tt200p As Double, tt200 As Double
Public tt100p As Double, tt100 As Double, tt50p As Double, tt50 As Double
Public tt20p As Double, tt20 As Double, tt10p As Double, tt10 As Double
Public tt5 As Double, tt5k As Double, tt2 As Double, tt2k As Double, tt1 As Double, tt1k As Double
Public tt05 As Double, tt05k As Double, tt02 As Double, tt02k As Double, tt01 As Double

nên hãy dùng các biên này. tt là thành tiền, 200 là loại 200 ngàn, 5 là 5 ngàn, 05 là loại 5 trăm, 02 là loại 200
k là tiền kim loại, p là tiền polyme, không có ký tự k hoặc p là tiền giấy.

thí dụ thay câu
Mã:
tt500 = [loai500] * [So500]
bằng
Mã:
[COLOR=#ff0000]tt200p[/COLOR] = [COLOR=#0000ff]loai200p[/COLOR] * [COLOR=#0000ff]so200p[/COLOR]
Với loai200p là textbox chứa loại tiền (200.000 polyme) và so200p là textbox chứa số tờ tiền 200.000 polyme.
 

File đính kèm

Lần chỉnh sửa cuối:
mình rất cám ơn ptm đã trả lời và có những hướng dẫn tận tình.
 
Nếu mỗi textbox số lượng tờ tiền đều sử dụng 1 Sub AfterUpdate như file trên sẽ quá nhiều (21 loại tiền)
Do đó cải tiến dùng 1 thủ tục có tham số truyền như sau:
PHP:
Sub Dienso(Loaitien, Ttien)
ln = Len(Str(Ttien))
If Ttien > 0 Then
    If ln > 9 Then
        Me.Controls("kq" & Loaitien & "1") = Left(Str(Ttien), Len(Str(Ttien)) - 9)
        Me.Controls("kq" & Loaitien & "2") = Mid(Str(Ttien), Len(Str(Ttien)) - 8, 3)
        Me.Controls("kq" & Loaitien & "3") = Mid(Str(Ttien), Len(Str(Ttien)) - 5, 3)
        Me.Controls("kq" & Loaitien & "4") = Right(Str(Ttien), 3)
    Else
        If ln > 6 Then
            Me.Controls("kq" & Loaitien & "1") = ""
            Me.Controls("kq" & Loaitien & "2") = Left(Str(Ttien), Len(Str(Ttien)) - 6)
            Me.Controls("kq" & Loaitien & "3") = Mid(Str(Ttien), Len(Str(Ttien)) - 5, 3)
            Me.Controls("kq" & Loaitien & "4") = Right(Str(Ttien), 3)
        Else
            If ln > 3 Then
                Me.Controls("kq" & Loaitien & "1") = ""
                Me.Controls("kq" & Loaitien & "2") = ""
                Me.Controls("kq" & Loaitien & "3") = Left(Str(Ttien), Len(Str(Ttien)) - 3)
                Me.Controls("kq" & Loaitien & "4") = Right(Str(Ttien), 3)
            Else
                Me.Controls("kq" & Loaitien & "1") = ""
                Me.Controls("kq" & Loaitien & "2") = ""
                Me.Controls("kq" & Loaitien & "3") = ""
                Me.Controls("kq" & Loaitien & "4") = Str(Ttien)
            
            End If
        End If
    End If
Else
    Me.Controls("kq" & Loaitien & "1") = ""
    Me.Controls("kq" & Loaitien & "2") = ""
    Me.Controls("kq" & Loaitien & "3") = ""
    Me.Controls("kq" & Loaitien & "4") = ""
End If
    Tongtien = Tinhtong
    Bangchu = SayUNI(Tinhtong, 1, 0)
End Sub

Sau đó mỗi textbox số lượng (tờ, đồng xu) sẽ chỉ ngắn như sau:

PHP:
Private Sub so500_AfterUpdate()
If Not IsNull(So500) Then tt500 = loai500 * So500 Else tt500 = 0
    Dienso "500", tt500
End Sub
PHP:
Private Sub So200p_AfterUpdate()
If Not IsNull(So200p) Then tt200p = Loai200p * So200p Else tt200p = 0
    Dienso "200p", tt200p
End Sub

vân vân.

File đính kèm đã làm cho 2 loại: bao gồm đặt lại tên, định dạng canh phải, và viết code.
 

File đính kèm

Code trên hơi khủng, em biết Thầy sẽ có code gọn hơn.
 
Thay sub đienso thế này cho vừa ngắn vừa nhẹ:
PHP:
Sub Dienso(Loaitien, Ttien)
ln = Len(Str(Ttien))
    For i = 1 To 4
        Me.Controls("kq" & Loaitien & i) = ""
    Next
    Arr = Split(Format(Ttien, "### ### ### ###"), " ")
    For i = UBound(Arr) To 0 Step -1
        Me.Controls("kq" & Loaitien & 4 - UBound(Arr) + i) = Arr(i)
    Next
    Tongtien = Tinhtong
    Bangchu = SayUNI(Tinhtong, 1, 0)
End Sub
 
Web KT

Bài viết mới nhất

Back
Top Bottom