Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel PMT错误:参数数目错误或属性分配无效_Excel_Vba - Fatal编程技术网

Excel PMT错误:参数数目错误或属性分配无效

Excel PMT错误:参数数目错误或属性分配无效,excel,vba,Excel,Vba,我正在使用用户表单为模型输入数据。我想使用VBA中的PMT函数计算贷款所需的每月付款。我需要这个,这样我就可以把它的价值加到每月的总开支中。我提供了我所写的当前代码的屏幕截图。每次运行宏时,我都会得到“错误数量的参数或无效的属性分配”,我尝试了几种不同的方法来计算,但我真的希望付款输入来自用户表单,因为我将有许多不同的输入 只是为了澄清“Val(txt_Loan-Amount)”是对我已经创建的用户表单的引用,并使用要从中提取数据的名称命名每个输入框 我已经尝试了手动添加数字,它确实计算了付款。

我正在使用用户表单为模型输入数据。我想使用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."

我想你漏掉了
付款
计算我想你漏掉了
付款
计算谢谢你的帮助!你的解决方案非常有效!谢谢你的帮助!你的解决方案非常有效!