我有三个文本框,我得到这样的价值:
Dim X, Y, W As Double
X = DLookup("Summ", "tblPlatej", "ID= " & Form_frmPlatej!ID)
Y = DLookup("Deposit_before", "tblPlatej", "ID= " & Form_frmPlatej!ID)
W = DLookup("Monthly_payment", "tblPlatej", "ID= " & Form_frmPlatej!ID)
但是当我像这样改变文本框的值时
Form_frmPlatej.Deposit_before = X - W + Y
我收到类型不匹配错误。所有文本框都是货币。如何计算新记录并将该数字放在“Deposit_before”文本框中?
Summ,Deposit_before,Monthly_payment是我表中的货币数据类型。 Deposit_before大部分是否定的。
以下是按钮点击的完整代码
Private Sub Command13_Click()
a1 = DLookup("Inhabitant", "tblClient", "ID = " & Form_frmMain!ID)
B1 = DLookup("PriceTBO", "tblPrice")
c1 = DLookup("Republican", "tblClient", "ID = " & Form_frmMain!ID)
d1 = DLookup("Regional", "tblClient", "ID = " & Form_frmMain!ID)
e1 = DLookup("Local", "tblClient", "ID = " & Form_frmMain!ID)
A = DLookup("IDP", "tblPlatej", "ID= " & Form_frmPlatej!ID)
B = DLookup("Type_of_payment", "tblPlatej", "ID= " & Form_frmPlatej!ID)
C = DLookup("Year", "tblPlatej", "ID= " & Form_frmPlatej!ID)
D = DLookup("Month", "tblPlatej", "ID= " & Form_frmPlatej!ID)
Y = DLookup("Deposit_before", "tblPlatej", "ID= " & Form_frmPlatej!ID) // Problem here
W = DLookup("Monthly_payment", "tblPlatej", "ID= " & Form_frmPlatej!ID) //Problem here
X = DLookup("Summ", "tblPlatej", "ID= " & Form_frmPlatej!ID)
i = Form_frmPlatej.Month.ListIndex
j = Form_frmPlatej.Year.ListIndex
den = DLookup("Date", "tblPlatej", "IDP = " & Form_frmPlatej!IDP)
If X <> " " Then
With Me.Recordset
If Me.Recordset.BOF = False And Me.Recordset.EOF = False Then
.MoveFirst
End If
.AddNew
.Edit
Form_frmPlatej.Deposit_before = X - W + Y //Problem here
Form_frmPlatej.IDP = A + 1
Form_frmPlatej.Type_of_payment = B
If i = 11 Then
Form_frmPlatej.Year = Year.ItemData(j + 1)
i = -1
Else
Form_frmPlatej.Year = Year.ItemData(j)
End If
Form_frmPlatej.Month = Month.ItemData(i + 1)
Form_frmPlatej.Date = DateAdd("m", 1, den)
If c1 <> 0 Then
Form_frmPlatej.Monthly_payment = (a1 * B1) - (c1 * (a1 * B1)) / 100
ElseIf d1 <> 0 Then
Form_frmPlatej.Monthly_payment = (a1 * B1) - (d1 * (a1 * B1)) / 100
ElseIf e1 <> 0 Then
Form_frmPlatej.Monthly_payment = (a1 * B1) - (e1 * (a1 * B1)) / 100
Else
Form_frmPlatej.Monthly_payment = a1 * B1
End If
.Update
End With
Else
MsgBox ("Please enter number")
End If
End Sub
我完全糊涂了。
答案 0 :(得分:3)
我打赌你的问题如下。当你这样说:
Dim X, Y, W As Double
你认为你做到了这一点:
Dim X As Double, Y As Double, W As Double
但你真正做的是:
Dim X
Dim Y
Dim W As Double
这是典型的VBA错误。大多数VBA程序员已经做到了,这就是为什么大多数VBA程序员依赖于每Dim
语句只声明一个变量(即每行一个)。否则很容易犯这个错误,之后很难发现它。
因此,对于Dim X
和Dim Y
,您已隐式声明X
和Y
为变体类型(相当于Dim X As Variant
和Dim Y As Variant
) 。
为什么这很重要?当你这样说时:
X = DLookup("Summ", "tblPlatej", "ID= " & Form_frmPlatej!ID)
Y = DLookup("Deposit_before", "tblPlatej", "ID= " & Form_frmPlatej!ID)
这两个DLookup
中的一个可能意外地返回不是数字的东西,例如字符串。您的变体X
或Y
会毫无怨言地接受此变体; Variant获取作业右侧的东西类型。
但是,当您尝试使用这些值进行数学运算时,如果X - W + Y
和/或X
是字符串,则Y
会抛出类型不匹配错误。
另见我之前的这个答案,我从中回答了一些措辞:https://stackoverflow.com/a/11089684/119775