0

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

这是代码:

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 的验证。

任何帮助将不胜感激!即使这很简单,我也忽略了。

谢谢!

4

1 回答 1

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业务并不是从特定单元格获取值的最佳方式,但这是一个不同的问题

于 2013-07-03T02:22:56.887 回答