如何使用elseif来修复我的代码?

时间:2016-06-09 12:05:01

标签: excel-vba if-statement vba excel

我有这个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

5 个答案:

答案 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