Đoạn macro khi tự gõ lại thì cho ra kết quả sai

Liên hệ QC

tijikama

Thành viên mới
Tham gia
1/4/15
Bài viết
45
Được thích
28
Chào các bác,
Mình đang tự học VBA, thì có 1 ví dụ trên mạng, mình copy code về làm thì ra kết quả đúng, nhưng tự gõ lại đoạn code đó thì kết quả cho ra lại bị sai, mình có kiểm tra lại nội dung thì không thấy khác biệt gì

Dưới đây là 2 đoạn mã: Đoạn 1 là mã trên mạng mình có copy về, đoạn 2 là mình tự gõ lại

Mã:
Dim monthly_rate As Single, loan_amount As Double, number_of_periods As Single, emi As Double
monthly_rate = Range("B6").Value / Range("B5").Value             'Interest/No of Payment per year
loan_amount = Range("B3").Value                                              'loan amount
number_of_periods = Range("B4").Value * Range("B5").Value   'loan terms * No of Payment per year
emi = WorksheetFunction.Pmt(monthly_rate, number_of_periods, -loan_amount)
Range("B9").Value = emi

Mã:
Dim monthly_rate As Single, loan_amount As Double, number_of_periods As Single, emi As Double
monthly_rate = Range("B6").Value / Range("B5").Value               'Interest/No of Payment per year
loan_amount = Range("B3").Value                                                'loan amount
number_of_periods = Range("B4").Value * Range("B5").Value      'loan terms * No of Payment per year
emi = WorksheetFunction.Pmt(monthy_rate, number_of_periods, -loan_amount)
Range("F9").Value = emi

Mình có đính kèm file bên dưới, các bác có biết lỗi này là do đâu không ạ?

1595390687018.png
 

File đính kèm

  • Test VBA.xlsm
    17.9 KB · Đọc: 5
Chào các bác,
Mình đang tự học VBA, thì có 1 ví dụ trên mạng, mình copy code về làm thì ra kết quả đúng, nhưng tự gõ lại đoạn code đó thì kết quả cho ra lại bị sai, mình có kiểm tra lại nội dung thì không thấy khác biệt gì

Dưới đây là 2 đoạn mã: Đoạn 1 là mã trên mạng mình có copy về, đoạn 2 là mình tự gõ lại

Mã:
Dim monthly_rate As Single, loan_amount As Double, number_of_periods As Single, emi As Double
monthly_rate = Range("B6").Value / Range("B5").Value             'Interest/No of Payment per year
loan_amount = Range("B3").Value                                              'loan amount
number_of_periods = Range("B4").Value * Range("B5").Value   'loan terms * No of Payment per year
emi = WorksheetFunction.Pmt(monthly_rate, number_of_periods, -loan_amount)
Range("B9").Value = emi

Mã:
Dim monthly_rate As Single, loan_amount As Double, number_of_periods As Single, emi As Double
monthly_rate = Range("B6").Value / Range("B5").Value               'Interest/No of Payment per year
loan_amount = Range("B3").Value                                                'loan amount
number_of_periods = Range("B4").Value * Range("B5").Value      'loan terms * No of Payment per year
emi = WorksheetFunction.Pmt(monthy_rate, number_of_periods, -loan_amount)
Range("F9").Value = emi

Mình có đính kèm file bên dưới, các bác có biết lỗi này là do đâu không ạ?

View attachment 241602
Macro2 có đoạn
Mã:
emi = WorksheetFunction.Pmt(monthy_rate, number_of_periods, -loan_amount)
bạn sai chữ monthy_rate kìa. Đúng ra phải là monthly_rate
 
Của bạn có cái biến monthy và monthly không giống nhau
 
Úi cảm ơn các bác, thế nào ngồi dò mãi mà không thấy cái lỗi đó mới chết :eek:
 
Úi cảm ơn các bác, thế nào ngồi dò mãi mà không thấy cái lỗi đó mới chết :eek:
Code ngắn ngắn còn dò được chứ nó mà dài chừng 2, 3 trang thì.. toi
Chỉ bạn cách dò khá đơn giản: Bạn thêm dòng Option Explicit lên đầu code, xong chạy 2 code sẽ thấy ngay

Annotation 2020-07-22 112315.jpg
 
Úi cảm ơn các bác, thế nào ngồi dò mãi mà không thấy cái lỗi đó mới chết :eek:
Đã gõ code thì phải thêm dòng Option Explicit ngay đầu module.
Khi gõ sai tiên biến thì 99% là VBA sẽ báo cho biết. (nhưng nếu đặt hai tên biến gần nhau quá, gõ nhầm bên này qua bên kia thì ráng chịu).
 
Đã gõ code thì phải thêm dòng Option Explicit ngay đầu module.
Khi gõ sai tiên biến thì 99% là VBA sẽ báo cho biết. (nhưng nếu đặt hai tên biến gần nhau quá, gõ nhầm bên này qua bên kia thì ráng chịu).
Có những nỗi đau dai dẳng mang tên nhầm tên biến đó bác, cháu bị suốt mà không tránh được, có khi mất cả ngày để tìm ra sự nhầm nhọt nhỏ nhoi đó, bác có thể chia sẻ vài mẹo để giải quyết vấn đề này không.
 
Có những nỗi đau dai dẳng mang tên nhầm tên biến đó bác, cháu bị suốt mà không tránh được, có khi mất cả ngày để tìm ra sự nhầm nhọt nhỏ nhoi đó, bác có thể chia sẻ vài mẹo để giải quyết vấn đề này không.
Đặt tên ngắn lại một chút.

Gặp bài code dài, tôi dùng hai nàm hình, cóp cái danh sách Dim sang một bảng Word.
Lúc ghi biến thì copy bên kia sang chứ không gõ lại. Dbl Click > kéo thả, hoặc Dbl Click > Ctrl+c > Ctrl+v
Mỗi lần thêm biến thì thêm bên Word rồi mới copy lại bên VBA.
 
Lần chỉnh sửa cuối:
Có những nỗi đau dai dẳng mang tên nhầm tên biến đó bác, cháu bị suốt mà không tránh được, có khi mất cả ngày để tìm ra sự nhầm nhọt nhỏ nhoi đó, bác có thể chia sẻ vài mẹo để giải quyết vấn đề này không.
Cách dễ là đặt tên biến không "gần" nhau
Thí dụ tên biến gồm 2 từ hoặc 3 từ ghép lại:
LastRw, NextRw, LastDataRw, NextDataRw, ...
DocDate, NoteDate, DeliverDate, ContrDate, PmtDate, DepositDate ...

Chứ mà Date1, Date2, Date3 thì tèo chắc
 
Nếu là mình thì tên các tham biến cần có gồm chữ to & chữ nhỏ; Khi ý bạn tranh thủ VBE phát hiện lỗi chính tả cho bạn;
Ví dụ thay vì:
Dim monthly_rate As Single, loan_amount As Double, number_of_periods As Single, emi As Double
Nên chăng
Dim Monthly_Rate As
Dim MonthRate As . . . , . . . .
Dim Loan_amount => Dim LoanAmount,. . . .
hay Dim NumberOfPeriods As . . . .
 
Lần chỉnh sửa cuối:
Đặt tên ngắn lại một chút.

Gặp bài code dài, tôi dùng hai nàm hình, cóp cái danh sách Dim sang một bảng Word.
Lúc ghi biến thì copy bên kia sang chứ không gõ lại. Dbl Click > kéo thả, hoặc Dbl Click > Ctrl+c > Ctrl+v
Mỗi lần thêm biến thì thêm bên Word rồi mới copy lại bên VBA.
Cách này cháu thấy mới đó bác, để cháu thử áp dụng. Một code chứa khoảng bao nhiêu biến thì bác dùng mẹo này ạ.
Nếu là mình thì tên các tham biến cần có gồm chữ to & chữ nhỏ; Khi ý bạn tranh thủ VBE phát hiện lỗi chính tả cho bạn;
Ví ** thay vì:

Nên chăng
Dim Monthly_Rate As
Dim MonthRate As . . . , . . . .
Dim Loan_amount => Dim LoanAmount,. . . .
hay Dim NumberOfPeriods As . . . .
Viết hoa ký tự đầu và không sai "_" trong tên biến, ngày trước cháu cũng hai sài cái "_" lắm, vì nghĩ nó dễ nhìn.
LastRw, NextRw, LastDataRw, NextDataRw
ái chà, cháu chưa có thói quen viết tắt các tên "Rw", mà toàn Row-> tên dài cả km.
 
Web KT
Back
Top Bottom