Khắc phục lỗi VBA không đọc được kết quả do phép tính có số thập phân

  • Thread starter Thread starter YenHTH
  • Ngày gửi Ngày gửi
Liên hệ QC

YenHTH

Thành viên mới
Tham gia
6/4/21
Bài viết
4
Được thích
1
Các cao nhân cho em hỏi chút. Em có file VBA theo dõi nhập xuất theo phương pháp Fifo. Với những mặt hàng có đơn giá chẵn nó đọc kết quả bình thường. Những mặt hàng có đơn giá là số thập phân thì nó ko hiện kết quả, chuyển file sang máy khác thì hiện kết quả bình thường. Các bác cho em cách khắc phục với ạ.
 

File đính kèm

Các cao nhân cho em hỏi chút. Em có file VBA theo dõi nhập xuất theo phương pháp Fifo. Với những mặt hàng có đơn giá chẵn nó đọc kết quả bình thường. Những mặt hàng có đơn giá là số thập phân thì nó ko hiện kết quả, chuyển file sang máy khác thì hiện kết quả bình thường. Các bác cho em cách khắc phục với ạ.
Có thể máy A nó định dạng số thập phân là dấu chấm (.) còn máy khác nó định dạng là dấu phẩy (,).
 
Các cao nhân cho em hỏi chút. Em có file VBA theo dõi nhập xuất theo phương pháp Fifo. Với những mặt hàng có đơn giá chẵn nó đọc kết quả bình thường. Những mặt hàng có đơn giá là số thập phân thì nó ko hiện kết quả, chuyển file sang máy khác thì hiện kết quả bình thường. Các bác cho em cách khắc phục với ạ.
Xét thêm tham số thứ 2 của hàm "ketqua"
PHP:
P84 =IFERROR(ketqua(Q84,IF(MID(1/2,2,1)=".",0,1)),0)
 
1. Công thức tại P84 là
Mã:
=IFERROR(ketqua(Q84),0)

và kết thúc bằng Enter chứ không phải bằng Ctrl + Shift + Enter.

2. Nếu tôi hiểu ý thì tôi đề nghị (tôi không hiểu dụng ý dùng tham số s nên để nguyên)

thay
Mã:
Function ketqua(Cell As Range, Optional s As Boolean)
    If s = 0 Then If Application.DecimalSeparator = "." Then _
        ketqua = Evaluate(Cell.Value) Else _
        ketqua = Evaluate(Replace(Replace(Cell.Value, ",", "."), ";", ","))
    If s <> 0 Then ketqua = Cell.FormulaLocal
End Function

bằng
Mã:
Function ketqua(Cell As Range, Optional s As Boolean)
    If s = 0 Then
        ketqua = Evaluate(Replace(Cell.Value, ",", "."))
    Else
        ketqua = Cell.FormulaLocal
    End If
End Function
 
2. Nếu tôi hiểu ý thì tôi đề nghị (tôi không hiểu dụng ý dùng tham số s nên để nguyên)
Tôi cũng mới thử:
Nếu s =0 hoặc False hoặc bỏ trống: tính ra kết quả
Nếu s = True hoặc s > 0: Ghi lại công thức
 
Tôi cũng mới thử:
Nếu s =0 hoặc False hoặc bỏ trống: tính ra kết quả
Nếu s = True hoặc s > 0: Ghi lại công thức
Cái này thì tôi biết. Tôi chỉ không hiểu dụng ý dùng s. Tức khi nào thì người ta truyền s = True, dùng khi muốn tính cái gì, ghi lại công thức để mà làm gì. Nhiều người có nhu cầu khó hiểu với tôi thôi.
 
Xét thêm tham số thứ 2 của hàm "ketqua"
PHP:
P84 =IFERROR(ketqua(Q84,IF(MID(1/2,2,1)=".",0,1)),0)[/
[/QUOTE]

[QUOTE="HieuCD, post: 1041694, member: 373036"]
 
[QUOTE="HieuCD, post: 1041694, member: 373036"]
Xét thêm tham số thứ 2 của hàm "ketqua"[CODE=php]P84 =IFERROR(ketqua(Q84,IF(MID(1/2,2,1)=".",0,1)),0)
Xét thêm tham số thứ 2 của hàm "ketqua"
PHP:
P84 =IFERROR(ketqua(Q84,IF(MID(1/2,2,1)=".",0,1)),0)
Mình đã thử bằng công thức của bạn tại P84 mà nó lại ra thế này là sao bạn: =fifo(N84;F84;$F$10:$O83;1;6;9;7)

[/QUOTE]
1. Công thức tại P84 là
Mã:
=IFERROR(ketqua(Q84),0)

và kết thúc bằng Enter chứ không phải bằng Ctrl + Shift + Enter.

2. Nếu tôi hiểu ý thì tôi đề nghị (tôi không hiểu dụng ý dùng tham số s nên để nguyên)

thay
Mã:
Function ketqua(Cell As Range, Optional s As Boolean)
    If s = 0 Then If Application.DecimalSeparator = "." Then _
        ketqua = Evaluate(Cell.Value) Else _
        ketqua = Evaluate(Replace(Replace(Cell.Value, ",", "."), ";", ","))
    If s <> 0 Then ketqua = Cell.FormulaLocal
End Function

bằng
Mã:
Function ketqua(Cell As Range, Optional s As Boolean)
    If s = 0 Then
        ketqua = Evaluate(Replace(Cell.Value, ",", "."))
    Else
        ketqua = Cell.FormulaLocal
    End If
End Function
Mình đã thay và đã khắc phục được. Cảm ơn bạn rất nhiều!
 
Web KT

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

Back
Top Bottom