Tìm thủ thuật nhanh hơn với chức năng tìm trong Blog

04/02/2010

Tính giá trị 1 công thức lưu trong table

Hỏi: Mình có table tblData thế này
  tblData
tblData
TK NODAU CODAU PSNO PSCO NOCUOI COCUOI
110 50000 0 20000 6000 24000 0
111 150000 0 10000 2000 138000 0
112 245000 0 15000 3000 227000 0
113 15000 0 2000 11000 2000 0
114 85000 0 3000 4000 78000 0
211 0 20000 6000 3000
11000
212 0 135000 7000 8000
120000
213 0 36000 5000 1000
30000
214 0 42000 6000 6000
30000

tblketqua( Chimuc,Congthuc,giatri)
Mình có các công thức lấy giá trị trên table tblData để cộng trừ nhân chia, và công thức này được lưu trên tblKetqua. Mình muốn tính toán và điền giá trị cuối cùng vào ô giatri trên tblketqua.


Đáp:
Lấy giá trị thông qua hàm Dlookup. Tổng quát, ta viết 1 function để lấy giá trị trên tblData như sau:
Function myIndex(Dong As String, Cot As String) As Long
 myIndex = DLookup(Cot, "tblData", "[TK]='" & Dong & "'")
End Function

Công thức lưu của bạn phải phát biểu dạng:
myIndex("110", "nodau")-(myIndex("113", "PSno") + myIndex("114", "PSCo"))
Lưu các công thức này vào field Congthuc trên tblketqua.

Ví dụ:
TBLKETQUA
TBLKETQUA
CHITIEU CONGTHUC SOTIEN
I. TÀI SẢN myIndex("110", "coCuoi")+ myIndex("111", "coCuoi")+ myIndex("113", "coCuoi") 0
1. Tài sản cố định myIndex("111", "noCuoi")-myIndex("112", "noCuoi") 0
2. Vật liệu myIndex("110", "nodau")-(myIndex("113", "PSno") + myIndex("114", "PSCo")) 0
II. NGUỒN VỐN myIndex("211", "Codau")+myIndex("212", "Codau")+myIndex("213", "Codau") 0
1. Tỷ lệ vốn chủ sở hữu myIndex("111", "NoCuoi") 0
Dùng hàm eval để thực thi các công thức dạng chuỗi. Eval(StringExp)
Run 1 query update để cập nhật giá trị công thức vào ô giá trị:
Private Sub cmdTinhKQ_Click()
SQL = "UPDATE TBLKETQUA SET SOTIEN = Eval([congthuc])"
DoCmd.SetWarnings False
DoCmd.RunSQL SQL
MsgBox " Da update thanh cong"
DoCmd.SetWarnings True
DoCmd.OpenTable "TBLKETQUA"
End Sub
Chúc thành công:
Mời xem demo: Download
____________________________________________________________________________________
Thảo luận thêm: http://thuthuataccess.co.cc/forum

6 nhận xét:

  1. Đọc bài viết tính giá trị của một công thức lưu trong table của anh Noname, tôi rất thích vì đó là điều tôi rất cần. Tuy nhiên, tôi áp dụng vào công việc thì bị lỗi do tbldata của tôi có TK không được lưu trong congthuc. Khi đó khi thực hiện update sẽ báo lỗi.
    Anh có thể hướng dẫn cho tôi cách khắc phục không? (Mỗi một đơn vị mà tôi cần lưu số liệu vào table sẽ có một TBldata khác nhau, với các TK khác nhau, nhưng congthuc thi phai viet tonghop lấy tất cả TK)
    Ví dụ: Tbldata này có TK 2111,2112,2113
    nhung tbldata khac thì có 2111,2131.2141
    Mà công thức thì gộp đủ tất cả 2111,2112,2113,2131,2141
    vì là cùng nhóm tính chất.
    Email của tôi là tranchautuyet@yahoo.com.vn.

    Trả lờiXóa
  2. Nếu bạn lưu ở nhiều table khác nhau thì hàm MyIndex của bạn phải truyền thêm thông số table.
    Function myIndex(Dong As String, Cot As String, tb as string) As Long
    myIndex = DLookup(Cot, tb, "[TK]='" & Dong & "'")
    End Function

    Và công thức bạn lưu phải truyền thêm tên table nữa!

    Trả lờiXóa
  3. Tôi muốn xin địa chỉ email của anh Naname được không. Tôi đang ứng dụng thủ thuật của anh chỉ vào việc khai thác dữ liệu từ cân đối lưu vào table. Tuy nhiên, tôi còn một chỉ tiêu chưa lấy được như sau:
    Tôi muốn tính tổng tài sản có hoặc tài sản nợ dựa vào cân số trên cân đối kế toán ( Dựa vào tính chất cân đối kế toán cộng tất cả số dư các tài khoản , còn tổng tài sản có hoặc nợ thì có một số tài khoản lấy chênh lệch ( như là tài khoản thanh toán 5199 của ngân hàng chẳng hạn, thường có 2 số dư, theo quy định phải tính chênh lệch giữa dư có và dư nợ và nằm bên tài sản có hoặc tài sản nợ còn tùy)
    Như vậy, giả sử tôi lấy cân số dư cuối nợ để tính và dư cuối nợ của 5199 lớn hơn dư cuối có của 5199 thì tôi sẽ trừ bớt dư cuối có của 5199 và ngược lại thì tôi phải trừ bớt dư cuối nợ của 5199 ( vì chênh lệch sẽ nằm bên tài sản nợ)
    Cột công thức thì không thể sử dụng hàm IFF rồi.
    Anh có cách gì hay thì chỉ tôi với.
    Cảm ơn anh Thật nhiều

    Trả lờiXóa
  4. duytuan2002@gmail.com
    Bạn gửi kèm ví dụ luôn nhé!

    Trả lờiXóa
  5. SAO MINH LAM THEO DE MO CUA BAN MA KO DC?

    Trả lờiXóa
  6. Hỏi: Tôi muốn viết chương trình quản lý kho đơn giản nhưng gặp phải vấn đề sau: Trong một danh mục hàng có số lương tồn kho. Từ form nhập hoặc xuất khi nhập vào số lượng nhập thêm hay xuất ra thì sẽ tự động cộng hoặc trừ vào số lượng tồn kho. Cách thực hiện thế nào?

    Trả lờiXóa

» Hãy để lại tên, email của bạn khi bạn post comment, để mình có thể dễ dàng trả lời comment của bạn khi cần.
» Có thể sử dụng các thẻ < b>,< i>,< a>. Và các icon thông dụng trên YM