2013-07-03 2 views
0

Я новичок в vba и использую его только пару месяцев. Я в основном учился, когда я ухожу. Несмотря на это, я пытаюсь написать код для ухода за множеством функций. Я написал код ниже, который запускается из командной кнопки в пользовательской форме. В основном код должен искать строку на листе Excel и проверять пару фрагментов информации, а затем предпринимать действия. Если код не может подтвердить совпадение между строками и строками в пользовательской форме, он останавливается и отображает сообщение об ошибке. Если он может проверить соответствие информации, предполагается, что она заполняет некоторую информацию в этой строке. Я понимаю, что этот код, который я написал, вероятно, полностью окутан и определенно не изящный, однако он работал до тех пор, пока я не добавил проверку кода продукта. Пожалуйста, кто-нибудь может помочь? Я посмотрел, посмотрел и не нашел решения.Вложенные ifs в vba

Вот код:

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.

Любая помощь будет очень признательна! Даже если это что-то простое, я упускаю из виду.

Спасибо!

ответ

2

В текущем коде вы проверяете ячейки 3, 5 и 7 для соответствующего значения и отображаете ошибку, если ни одна из них не совпадает, а затем выходите из Sub. Вы только продолжаете проверять ячейку 10, если ячейка 7 имеет совпадение. Если ячейки 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 

Вся ActiveCell и Select бизнеса это не самый лучший способ, чтобы получить значения из определенных ячеек но это другой вопрос

+0

Большое спасибо за помощь! Это было легко и решило проблему немедленно. Я понимаю ваш комментарий к ActiveCell и Select. В основном я учился, но я хочу научиться правильно кодировать. К сожалению, иногда я изучаю вещи после того, как я уже написал столько строк, которые я не хочу возвращать и повторять! – user2544753

Смежные вопросы