bạn ơi cho mình hỏi nếu mình muốn đọc số ra chữ số tiền đô la mỹ bằng tiếng việt ví dụ 93,000 USD đọc là chín mươi ba nghìn đô la mỹ
thì dùng công thức nào
Trong bộ cài add-in AccHelper có một file "AccHelper API.txt". File này mô tả cách khai báo hàm API, hàm trong tư viện add-in Xll được triệu gọi để sử dụng.
Trong Access, bạn tạo module và copy->paste đoạn code.
Mình đã paste đoạn code trong file "AccHelper API.txt" vào module trong Access như bạn hướng dẫn. Nhưng vẫn chưa chạy được![]()
Cho mình hỏi cách SỬ DỤNG & CHỨC NĂNG hàm trong Access có khác j trong excel không ?
ví dụ: Excel: USD (ROUND(5000.123,2)) ---> Access: USDW (ROUND(5000.123,2))
Excel: VND (5000.12,,"ĐÔ LA MỸ")---> Access: VNDW (5000.12,,"ĐÔ LA MỸ")
![]()
Dưới đây là file ví dụ ^^ Many thanks !
Có thể dùng trong bấy kỳ môi trường nào mà cho phép chạy code: VB6, VBA: Excel, Access, Word,...Delphi, ....
Bạn hãy copy khai náo API và đưa vào module là dùng được các hàm. Hãy copy file acchelper.xll vào thư mục hệ thống C:\Windows\System32
Sau khi copy file acchelper.xll vào thư mục hệ thống C:\Windows\System32 thì mình đã chạy được
=USDW(1234567.89)
=USDW(1234567.89,"ĐỒNG")
=VNDW(12334567.89)
đều ok
Nhưng còn hàm =VNDW(1234567.89,"ĐÔ LA MỸ") or =VNDW(1234567.89,,"ĐÔ LA MỸ")
thì không được. bạn xem giúp mình thử công thức hàm VNDW lỗi ở chỗ nào với ! Many thanks !
![]()
& Cho mình hỏi là tùy chọn AcchelperOptions có chỉnh được cho Access như bên excel không ?
View attachment 59636
Declare Function VNDW Lib "AccHelper.xll" Alias "VND" (ByVal Amount As Double, _
Optional ByVal OutputType As Integer = 3, _
Optional ByVal Unit1 As Variant = vbNullString, _
Optional ByVal Unit2 As Variant = vbNullString, _
Optional ByVal MUnit2 As Long = 1, _
Optional ByVal HasGroupingSymbol As Boolean = False) As Variant
'OutputType = 1 => TCVN3(ABC)
'OutputType = 2 => VNI
'OutputType = 3 => UNICODE (Ngam dinh)
Declare Function USDW Lib "AccHelper.xll" Alias "USD" (ByVal Amount As Double, _
Optional ByVal Unit1 As Variant = vbNullString, _
Optional ByVal Unit2 As Variant = vbNullString, _
Optional ByVal MUnit2 As Long = 1, _
Optional ByVal HasGroupingSymbol As Boolean = False) As Variant
Đối số thứ 2 của hàm VNDW là kiểu dữ liệu
'OutputType = 1 => TCVN3(ABC)
'OutputType = 2 => VNI
'OutputType = 3 => UNICODE (Ngam dinh)
Đối số thứ 3 là tên đơn vị đo số chắn. Đối số thứ 4 là tên đơn vị đo số lẻ.
Vậy bạn phải viết công thức như sau sẽ đúng.
=VNDW(1234567.89, 3, "ĐÔ LA MỸ", "CENTS")
Cấu trúc hàm mình đã viết: =VNDW(1234567.89,, "ĐÔ LA MỸ") -> k chạy
cấu trúc đúng : =VNDW(1234567.89,3, "ĐÔ LA MỸ") -> chạy
Lỗi ở đối số thứ 2 của hàm là kiểu dữ liệu. Mình thắc mắc là Access không tự động ngầm định ",," được giống như bên excel hả bạn
bt bên excel mình toàn
",,"
Mình đang sử dụng 1 file đọc số thành chữ khác (Module 3 trong file đính kèm) but đọc -> english lại thiếu "and" nối giữa các phần triệu ngàn trăm .... -> không được hay như cái của bạn.
![]()
Nhưng có ưu điểm là nó là 1 đoạn code full paste vào module trong Access lun nên tiện khi copy file Access đó sang các máy khác thì vẫn sử dụng được nó. (vì là file làm việc chung của cả cty nên Khi đó sẽ không lệ thuộc vào việc máy người sử dụng file đó có cài tiện ích hay không mà đã mặc định tích hợp sẵn trong file)
Bạn có thể giúp mình đoạn code full riêng biệt để paste vào module của Access luôn mà vẫn đảm bảo tính hợp lý như Add-In v2.0.4 với các chi tiết tùy chọn như file AcchelperOptions được không bạn? Many thanks !
Hj yêu cầu nghe có vẻ tham lam nhưng nếu được đáp ứng thì cảm ơn bạn nhiều nhiều
![]()
Nếu bạn muốn có code cho đọc số thì dùng code trên diễn đàn này nhiều lắm. Còn cái AccHelper.xll là một add-in đặc biệt - mã máy nên tốc độ chạy rất nhanh và không bị pm diệt virus quét. Code lập trình trên Delphi nên không thể paste vào VBA được bạn à.
Chả biết cái code Amount này có OK, bạn test thử.Hj tại nhiều nên mình không biết lấy cái nào là ok hếtmình k biết về code nên không biết cái nào đáp ứng được yêu cầu có "and" như add-in này. Nếu có thể Bạn cho giúp mình 1 cái link có liên kết đến chỗ chứa đoạn code mà mình muốn tìm với. Many thanks!
Function CS_proNtoC(ByVal Pso, ByVal pKieu As Integer, ByVal pType) As String
'-----pKieu=1 ®æi qua kiÓu VND
'On Error GoTo NtoCErr
On Error Resume Next
Dim StrSo As String, StrChu As String, Tchu As String, Tstr As String
Dim l As Integer, i As Integer, j As Integer, n As Integer
Static Chu3hang(4) As String
Chu3hang(0) = ""
Chu3hang(1) = IIf(pKieu = 1, "ngµn ", "thousand ")
Chu3hang(2) = IIf(pKieu = 1, "triÖu ", "million ")
Chu3hang(3) = IIf(pKieu = 1, "tû ", "billion ")
Chu3hang(4) = IIf(pKieu = 1, "ngµn ", "thousand ")
If Pso = 0 Then
CS_proNtoC = IIf(pKieu = 1, " Zero dong", " Zero dollar")
Exit Function
End If
If Pso < 1 Then
Tstr = Format$(Pso)
Tstr = Right(Tstr, 2)
CS_proNtoC = "Zero dollars and " & CS_DoiPhanLe(Tstr) & "cents"
Exit Function
End If
StrSo = Format$(Pso)
l = Len(StrSo)
If pKieu <> 1 Then
If l > 18 Then GoTo NtoCErr
i = InStr(1, StrSo, ".")
If i > 1 Then
Tstr = Left(Right(StrSo, l - i), 2)
StrSo = Left(StrSo, i - 1)
l = Len(StrSo)
Else
Tstr = ""
End If
End If
StrChu = ""
If l > 14 Then GoTo NtoCErr
i = Fix(l / 3)
j = l Mod 3
If i >= 1 And j = 0 Then
n = i - 1
Else
n = i
End If
i = 0
j = IIf(j = 0, 3, j)
Do Until n < 0
Tchu = Format$(Right(Left(StrSo, i * 3 + j), IIf(i = 0, j, 3)), "@@@")
If pKieu <> 1 Then
If i = 0 Then
pKieu = 4
ElseIf n = 0 Then
pKieu = 3
End If
End If
StrChu = StrChu & CS_proDoi3So(Tchu, pKieu) & IIf(Tchu <> "000" Or n = 3, Chu3hang(n), "")
n = n - 1
i = i + 1
Loop
l = Len(StrChu)
If Len(Tstr) = 1 Then
Tstr = Tstr & "0"
End If
CS_proNtoC = UCase(Left(StrChu, 1)) & Right(StrChu, l - 1) & IIf((pKieu = 2 Or pType = 2), "®ång", IIf(Tstr = "", "US dollars", "US dollars and " & CS_DoiPhanLe(Tstr) & " cents"))
Exit Function
NtoCErr:
MsgBox "Invalid Data, please reenter...", 48, "VAT Invoice System"
CS_proNtoC = ""
Exit Function
End Function
Làm 1 if nữa vậy, replaceMình muốn hoàn chỉnh (không phải sửa mới 100%) đoạn code đang sử dụng dưới đây để có thêm "AND" giữa hàng triệu ngàn ... như hình minh họa (vẫn giữ lại cấu trúc hàm như cũ).
=CS_proNtoC(1234567.89,2,1)
=CS_proNtoC(1234567.89,1,2)
Rất mong các bạn hoàn chỉnh giúp mình ! Many thanks!
View attachment 59696
* Chú thích: Dòng đích mà mình muốn đạt được là : "One million two hundred and thirty four thousand five hundred and sixty seven US Dollars and eighty nine cents" (được thực hiện = ad-in)
CS_proNtoC = UCase(Left(StrChu, 1)) & Right(StrChu, l - 1) & IIf((pKieu = 2 Or pType = 2), "®ång", IIf(Tstr = "", "US dollars", "US dollars and " & CS_DoiPhanLe(Tstr) & " cents"))
CS_proNtoC = Replace(CS_proNtoC, "hundred ", "hundred and ")
CS_proNtoC = Replace(CS_proNtoC, "and US ", "US ")
Exit Function
xin cảm ơn. Tôi đã add vào và chạy được rồi. Nhưng vô tình tôi thay đổi đường dẫn chứa file AccHelper.xll giờ mỗi lần mở lên là excel báo lỗi
xin chỉ giúp cách tháo gỡ file mình đã addin vào excel
cho hỏi tại sao khi tôi sử dụng mail merge dữ liệu qua word nó lại không đọc được tiếng việt
ví dụ : một thành m?t
tôi tìm ra được nguyên nhân rồi nhưng không biết cách khắc phục, xin chỉ giúp
do tôi muốn khi mail merge thì các con số hiển thị trong word có dấu phân cách ngàn (ví dụ : 1.000.000)
khi merge tôi dùng chế độ MS Excel Worksheets via DDE (*.xls)
nên kết quả là tất cả dữ liệu tiếng việt đều không đọc được
xin chỉ giúp tôi cách giải quyết