我有这个Excel VBA代码,应该根据产品告诉我要支付的金额,但是我输入“credit”或任何其他产品,它会跳过第一个IF语句并进入第二个。
我想知道如果可以的话,我会如何使用其它方法来制作正确的金额。
以下是代码:
Dim prod As String
Dim sumam As Integer
Dim total As Integer
Dim rate As Integer
prod = InputBox("Introduceti tipul de produs")
total = InputBox("Introduceti suma totala de plata")
If prod = credit Then
If total < 1000 Then sumam = 175
If total > 1000 And total < 3000 Then sumam = 350
If total > 3000 And total < 6000 Then sumam = 425
Else
If total < 1000 Then sumam = 150
If total > 1000 And total < 2000 Then sumam = 200
If total > 2000 And total < 5000 Then sumam = 325
If total > 5000 And total < 8000 Then sumam = 450
If total > 8000 And total < 12000 Then sumam = 550
If total > 12000 Then sumam = 675
rate = total / sumam
textprod.Text = prod
textprod.TextAlign = fmTextAlignRight
texttot.Text = total
texttot.TextAlign = fmTextAlignRight
textsumm.Text = sumam
textsumm.TextAlign = fmTextAlignRight
textrate.Text = rate
textrate.TextAlign = fmTextAlignRight
End If
End Sub
答案 0 :(得分:1)
[未测试]
嗨Putaru,尝试在信用证上加双引号。像这样:
If prod = "credit" Then
If total < 1000 Then sumam = 175
If total > 1000 And total < 3000 Then sumam = 350
If total > 3000 And total < 6000 Then sumam = 425
Else...
我不确定textprod是什么?不确定这是否是一个对象,但添加双引号应该让if语句检查一个值,而不是一个名为credit的变量,而是检查一个名为“credit”的字符串,其中包含代码中包含的双引号。
希望这有效,正如我所说,这是未经测试的......
因为你有这样的方式:
If prod = credit Then
If total < 1000 Then sumam = 175
If total > 1000 And total < 3000 Then sumam = 350
If total > 3000 And total < 6000 Then sumam = 425
Else
它正在寻找一个名为credit的变量,你没有申报。 快乐编码:)
编辑:
Option Explicit
Sub test()
Dim prod As String
Dim sumam As Integer
Dim total As Integer
Dim rate As Integer
prod = InputBox("Enter credit or cheque")
total = InputBox("Enter total")
sumam = 0
rate = 0
If prod = "credit" Then
If total < 1000 Then sumam = 175
If total > 1000 And total < 3000 Then sumam = 350
If total > 3000 And total < 6000 Then sumam = 425
Else
If total < 1000 Then sumam = 150
If total > 1000 And total < 2000 Then sumam = 200
If total > 2000 And total < 5000 Then sumam = 325
If total > 5000 And total < 8000 Then sumam = 450
If total > 8000 And total < 12000 Then sumam = 550
If total > 12000 Then sumam = 675
End If
rate = total / sumam
MsgBox (rate)
End Sub
经过测试,它不再返回0,它会在消息框中显示您的值。
答案 1 :(得分:0)
我认为你缺少双引号......你应该使用prod =“credit”而不是prod = credit
答案 2 :(得分:0)
你试过这个吗?
If prod = "credit" Then
请注意信用单词周围的引号。
答案 3 :(得分:0)
使用ElseIf
是另一种方法来做你正在做的事情,但它不一定是修复。以下是ElseIf
示例: -
Public Sub ElseIfSample()
If total < 1000 Then
sumam = 175
ElseIf total > 1000 And total < 3000 Then
sumam = 350
ElseIf total > 3000 And total < 6000 Then
sumam = 425
End If
End Sub
但是这和你以前的代码都会有相同的缺失值1000,3000和超过5999的任何问题
下面的代码会解决这个问题以及其他一些小改动: -
Public Sub Sample()
Dim LngSumam As Long
Dim LngRate As Long
Dim StrProd As String
Dim StrTotal As String
StrProd = InputBox("Introduceti tipul de produs")
StrTotal = InputBox("Introduceti suma totala de plata")
If Not IsNumeric(StrTotal) Then Exit Sub
If Trim(UCase(StrProd)) = "CREDIT" Then
If CLng(StrTotal) >= 3000 Then 'Total equal to or above 3000
LngSumam = 425
ElseIf CLng(StrTotal) >= 1000 Then 'Total equal to or above 1000
LngSumam = 350
Else 'All other cases
LngSumam = 175
End If
Else
If CLng(StrTotal) >= 12000 Then 'Total equal to or above 12000
LngSumam = 675
ElseIf CLng(StrTotal) >= 8000 Then 'Total equal to or above 8000
LngSumam = 550
ElseIf CLng(StrTotal) >= 5000 Then 'Total equal to or above 5000
LngSumam = 550
ElseIf CLng(StrTotal) >= 2000 Then 'Total equal to or above 2000
LngSumam = 325
ElseIf CLng(StrTotal) >= 1000 Then 'Total equal to or above 1000
LngSumam = 200
Else 'All other cases
LngSumam = 200
End If
LngRate = CLng(StrTotal) / LngSumam
textprod.Text = StrProd
textprod.TextAlign = fmTextAlignRight
texttot.Text = StrTotal
texttot.TextAlign = fmTextAlignRight
textsumm.Text = LngSumam
textsumm.TextAlign = fmTextAlignRight
textrate.Text = LngRate
textrate.TextAlign = fmTextAlignRight
End If
End Sub
Long
代替Integer
,因为Long
更容易处理更大的数字,String
以确保更少的错误您也可以使用嵌套的If
语句或Select Case
。
注意:如果用户未在第一个输入框中输入“Credit”,则只会填写鳕鱼中的文本字段,这是正确的吗?
答案 4 :(得分:0)
这个的常见原因是修剪,U / lcase的混合(因为它是他可能按照他的感觉输入的用户的输入)。你试过吗?:
If lcase(Trim(prod)) = "credit" Then