在vba中嵌套ifs

时间:2013-07-03 02:07:02

标签: vba excel-vba excel

我是vba的新手,并且只使用了几个月。我基本上一直在学习。尽管如此,我正在尝试编写一些代码来处理各种功能。我编写了下面的代码,该代码是从用户窗体上的命令按钮启动的。该代码基本上应该在Excel工作表中搜索一行并验证几条信息然后采取行动。如果代码无法验证行上的条目与userform中的条目之间的匹配,则它将停止并显示错误消息。如果它可以验证信息匹配,则应该继续填充该行的一些信息。我意识到我编写的这段代码可能完全是混乱的,并且显然不优雅,但是在我添加产品代码验证之前它一直在工作。拜托,有人可以帮忙吗?我看了看,找不到解决方案。

以下是代码:

Private Sub AddDelivButton_Click()

Sheets("Deliveries").Activate

Dim number As Integer, rownumber As Integer, result As Long, i As Integer
number = POTextBox.Value
rownumber = 0
result = 1000000
For i = 1 To 25000
If Cells(i, 1).Value = number Then
    result = Cells(i, 1).Value
    rownumber = i
End If
Next i
If result = 1000000 Then
    MsgBox "PO Number Not Found"
    Sheets("Dashboard").Activate
    Exit Sub
  Else
    Cells(rownumber, 1).Select

ActiveCell.EntireRow.Cells(3).Select
    If ActiveCell.Value <> ProdCodeListBox1.Value Then
        ActiveCell.EntireRow.Cells(5).Select
        If ActiveCell.Value <> ProdCodeListBox1.Value Then
            ActiveCell.EntireRow.Cells(7).Select
            If ActiveCell.Value <> ProdCodeListBox1.Value Then
                MsgBox "Product Code Not Found"
                Sheets("Dashboard").Activate
                Exit Sub
              Else
                ActiveCell.EntireRow.Cells(10).Select
                If ActiveCell.Value = "" Then
                    ActiveCell.Value = ProdCodeListBox1.Value
                    ActiveCell.EntireRow.Cells(11).Value = WeightTextBox1.Value
                    ActiveCell.EntireRow.Cells(12).Value = DateTextBox1.Value
                  Else
                    ActiveCell.EntireRow.Cells(13).Select
                    If ActiveCell.Value = "" Then
                        ActiveCell.Value = ProdCodeListBox1.Value
                        ActiveCell.EntireRow.Cells(14).Value = WeightTextBox1.Value
                        ActiveCell.EntireRow.Cells(15).Value = DateTextBox1.Value
                      Else

这会持续几次迭代并节省空间我没有在这里包含所有这些。我只想说最后两个if语句一直有效,直到我添加了ProdCodeListBox1的验证。

非常感谢任何帮助!即使它很简单,我也会忽视它。

谢谢!

1 个答案:

答案 0 :(得分:2)

在当前代码中,检查单元格3,5和7是否有匹配值,如果它们都不匹配则显示错误,然后完全退出Sub。如果单元格7匹配,您只能继续检查单元格10。如果单元格3或5匹配,则永远不会检查单元格10

请改为尝试:

ActiveCell.EntireRow.Cells(3).Select

If ActiveCell.Value <> ProdCodeListBox1.Value Then
    ActiveCell.EntireRow.Cells(5).Select

    If ActiveCell.Value <> ProdCodeListBox1.Value Then
        ActiveCell.EntireRow.Cells(7).Select

        If ActiveCell.Value <> ProdCodeListBox1.Value Then
            MsgBox "Product Code Not Found"
            Sheets("Dashboard").Activate
            Exit Sub
        End If
    End If
End If

ActiveCell.EntireRow.Cells(10).Select
If ActiveCell.Value = "" Then

所有ActiveCellSelect业务都不是从特定单元格获取值的最佳方式,但这是一个不同的问题