2013-07-03 5 views
0

vba를 처음 사용하고 몇 달 동안 만 사용했습니다. 나는 기본적으로 배웠습니다. 그럼에도 불구하고, 나는 다양한 기능을 신경 쓰는 코드를 작성하려고한다. 나는 userform의 명령 단추에서 시작되는 아래 코드를 작성했습니다. 이 코드는 기본적으로 Excel 워크 시트의 행을 검색하고 몇 가지 정보를 확인한 다음 조치를 취하기로되어 있습니다. 코드가 행의 항목과 userform의 항목 사이의 일치를 확인할 수없는 경우 오류를 중지하고 오류 메시지를 표시합니다. 정보가 일치하는지 확인할 수 있으면 해당 행에 대한 정보를 채우는 것으로 진행됩니다. 필자가 작성한이 코드는 완벽하게 엉성하고 분명히 우아하지 않지만 제품 코드에 대한 유효성 검사를 추가 할 때까지 작동하고 있다는 것을 알았습니다. 제발, 도와 줄 수 있니? 나는보고 보았고 해결책을 찾을 수 없습니다.vba의 중첩 된 if

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 

이 여러 번 반복을 위해 계속 내가 여기에 그들 모두를 포함하지 않은 공간을 절약하기 위해 다음과 같습니다

는 코드입니다. ProdCodeListBox1에 대한 유효성 검사를 추가 할 때까지 마지막 두 if 문이 작동한다고 말하면 충분합니다.

도움이 필요하시면 대단히 감사하겠습니다. 그것이 무언가 간단하더라도 나는 멀리 바라보고있다.

감사합니다.

답변

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 사업의 모든 특정 세포의 값을 얻을 수있는 가장 좋은 방법이 아니다 하지만 그건 다른 질문입니다

+0

도움을 많이 주셔서 감사합니다! 그것은 쉽고 즉시 문제를 해결했습니다. ActiveCell 및 Select에 대한 귀하의 의견을 이해합니다. 나는 기본적으로 자신을 가르쳐 왔지만 더 효율적으로 코드를 작성하는 법을 배우기를 원합니다. 불행히도 가끔은 내가 너무 많은 줄을 써서 다시 돌아가고 다시하고 싶지 않은 것을 배운다. – user2544753