Excel PMT错误:参数数目错误或属性分配无效
我正在使用用户表单为模型输入数据。我想使用VBA中的PMT函数计算贷款所需的每月付款。我需要这个,这样我就可以把它的价值加到每月的总开支中。我提供了我所写的当前代码的屏幕截图。每次运行宏时,我都会得到“错误数量的参数或无效的属性分配”,我尝试了几种不同的方法来计算,但我真的希望付款输入来自用户表单,因为我将有许多不同的输入 只是为了澄清“Val(txt_Loan-Amount)”是对我已经创建的用户表单的引用,并使用要从中提取数据的名称命名每个输入框 我已经尝试了手动添加数字,它确实计算了付款。我假设错误来自用户表单值Excel PMT错误:参数数目错误或属性分配无效,excel,vba,Excel,Vba,我正在使用用户表单为模型输入数据。我想使用VBA中的PMT函数计算贷款所需的每月付款。我需要这个,这样我就可以把它的价值加到每月的总开支中。我提供了我所写的当前代码的屏幕截图。每次运行宏时,我都会得到“错误数量的参数或无效的属性分配”,我尝试了几种不同的方法来计算,但我真的希望付款输入来自用户表单,因为我将有许多不同的输入 只是为了澄清“Val(txt_Loan-Amount)”是对我已经创建的用户表单的引用,并使用要从中提取数据的名称命名每个输入框 我已经尝试了手动添加数字,它确实计算了付款。
Dim FVal, PVal, APR, TotPmts, Payment
FVal = 0 ' Usually 0 for a loan.
PVal = Val(Txt_Loan_Amount)
APR = Val(Txt_Interest_Rate)
If APR > 1 Then APR = APR / 100 ' Ensure proper form.
TotPmts = Val(Txt_Amortized) * 12
MsgBox "Your payment will be " & Format(Payment) & " per month."
正如我上面提到的,我收到的错误是“参数数量错误或属性分配无效”。我不确定为什么会发生这种情况嗨,您似乎从未用
结束If
语句来结束If
。它不是100%清楚的结束,如果属于,但我把它放在我认为你想要的地方
另外,您的Dim
语句将变量声明为Variant
类型,因此您可能还需要相应地声明这些变量,因为这可能也会导致错误
良好的编码实践也是缩进。我在下面做了一些基础知识,它使阅读、遵循和维护变得更容易,但它无法解决您的问题
试试下面的方法
Dim FVal, PVal, APR, TotPmts, Payment
FVal = 0 ' Usually 0 for a loan.
PVal = Val(Txt_Loan_Amount)
APR = Val(Txt_Interest_Rate)
If APR > 1 Then
APR = APR / 100 ' Ensure proper form.
End If 'Please note I put this where I thought it belonged, you may need to move this.
TotPmts = Val(Txt_Amortized) * 12
MsgBox "Your payment will be " & Format(Payment) & " per month."
您好,您似乎从未用
End If
结束您的If
语句。它不是100%清楚的结束,如果属于,但我把它放在我认为你想要的地方
另外,您的Dim
语句将变量声明为Variant
类型,因此您可能还需要相应地声明这些变量,因为这可能也会导致错误
良好的编码实践也是缩进。我在下面做了一些基础知识,它使阅读、遵循和维护变得更容易,但它无法解决您的问题
试试下面的方法
Dim FVal, PVal, APR, TotPmts, Payment
FVal = 0 ' Usually 0 for a loan.
PVal = Val(Txt_Loan_Amount)
APR = Val(Txt_Interest_Rate)
If APR > 1 Then
APR = APR / 100 ' Ensure proper form.
End If 'Please note I put this where I thought it belonged, you may need to move this.
TotPmts = Val(Txt_Amortized) * 12
MsgBox "Your payment will be " & Format(Payment) & " per month."
您可以有一行IF/Then语句。如上所述,所有变量都是变量。如果输入
WorksheetFunction.Pmt
命令,它将告诉您变量应该是什么,即Arg1为双精度,Arg2为双精度。您的变量应该匹配。您可以在用户表单上测试输入,以确保它们符合要求。当您确定您的APR大于或小于1时,您将希望在将时段转换为月度时转换为月度费率。在格式化付款时
,我在前面放了一个减号以显示为正数
Dim PVal As Double
Dim APR As Double
Dim TotPmts As Double
Dim Payment As Double
PVal = Val(Txt_Loan_Amount) 'Based on input
APR = Val(Txt_Interest_Rate) 'Based on input
If APR > 1 Then APR = APR / 100 ' Ensure proper form.
APR = APR / 12 'Convert to monthly
TotPmts = Val(Txt_Amortized) * 12 'Using monthly
Payment = WorksheetFunction.Pmt(APR, TotPmts, PVal)
MsgBox "Your payment will be " & Format(-Payment, "$#,##0.00") & " per month."
您可以有一行IF/Then语句。如上所述,所有变量都是变量。如果输入
WorksheetFunction.Pmt
命令,它将告诉您变量应该是什么,即Arg1为双精度,Arg2为双精度。您的变量应该匹配。您可以在用户表单上测试输入,以确保它们符合要求。当您确定您的APR大于或小于1时,您将希望在将时段转换为月度时转换为月度费率。在格式化付款时
,我在前面放了一个减号以显示为正数
Dim PVal As Double
Dim APR As Double
Dim TotPmts As Double
Dim Payment As Double
PVal = Val(Txt_Loan_Amount) 'Based on input
APR = Val(Txt_Interest_Rate) 'Based on input
If APR > 1 Then APR = APR / 100 ' Ensure proper form.
APR = APR / 12 'Convert to monthly
TotPmts = Val(Txt_Amortized) * 12 'Using monthly
Payment = WorksheetFunction.Pmt(APR, TotPmts, PVal)
MsgBox "Your payment will be " & Format(-Payment, "$#,##0.00") & " per month."
我想你漏掉了
付款
计算我想你漏掉了付款
计算谢谢你的帮助!你的解决方案非常有效!谢谢你的帮助!你的解决方案非常有效!