Проверьте поле формы доступа на наличие нулевого значения, если оно не равно нулю, вызовите функцию добавления

У меня есть эта простая форма доступа, когда вы заполняете форму и забываете заполнить поле «Бизнес-подразделение», появляется всплывающее окно msgBox, сообщающее вам об этом, и установите фокус на это самое поле со списком. Если это не ноль, я хочу вызвать следующую функцию. Первая часть этого кода работает, но когда она не равна NULL, она не будет продолжаться.

 Private Sub Image_AddNon_RPS_Button_Click()

 If IsNull(Me.BU_Selected_Add) Then
    MsgBox "Please Select a Business Unit!", vbOKOnly
            Exit Sub
         End If
    Me.Combo_BU_Selector.SetFocus
    Exit Sub
If Not IsNull(Me.BU_Selected_Add) Then
    Call Add_RPS_LINE
        End If
End Sub

Кто-нибудь видит, где я полностью в левом поле?


person T-Rex    schedule 21.02.2014    source источник


Ответы (2)


У вас есть дополнительный Exit Sub (тот, что после первого MsgBox), который мешает вашему коду делать то, что вы хотите. Кроме того, ваш первый End If находится не в том месте.

Вместо этого попробуйте что-то вроде этого:

Private Sub Image_AddNon_RPS_Button_Click()

  If IsNull(Me.BU_Selected_Add) Then                     ' No business unit 
      MsgBox "Please Select a Business Unit!", vbOKOnly  ' Tell user 
      Me.Combo_BU_Selector.SetFocus                      ' Focus the control
      Exit Sub                                           ' Exit the method
  End If                                                 ' End the IsNull test

  Call Add_RPS_LINE      ' You only get here if the above doesn't execute
End Sub

Будет полезно, если вы научитесь правильно делать отступы в своем коде для визуального соответствия If и End If, чтобы вы могли видеть, где они выстраиваются (совпадают), а где нет. :-)

person Ken White    schedule 21.02.2014
comment
Спасибо за советы и изменение кода. Я заменил существующий код, однако, когда у меня есть выбранный BU, то есть он не равен нулю, ничего не происходит. Подпрограмма Add_RPS_Line работает сама по себе, если я устанавливаю Button_Click для этого конкретного кода. - person T-Rex; 21.02.2014

Если вы исправите отступ вашего кода на:

Private Sub Image_AddNon_RPS_Button_Click()
   If IsNull(Me.BU_Selected_Add) Then
      MsgBox "Please Select a Business Unit!", vbOKOnly
      Exit Sub
   End If
   Me.Combo_BU_Selector.SetFocus
   Exit Sub
   If Not IsNull(Me.BU_Selected_Add) Then
      Call Add_RPS_LINE
   End If
End Sub

Вы можете ясно видеть, что Exit Sub в середине завершит функцию до того, как она дойдет до Call Add_RPS_LINE.

Если вы посмотрите на две имеющиеся у вас инструкции If, вы увидите, что они почти одинаковы, поэтому Else уместно, что приводит к более простому и читабельному коду.

Private Sub Image_AddNon_RPS_Button_Click()
   If IsNull(Me.BU_Selected_Add) Then
      MsgBox "Please Select a Business Unit!", vbOKOnly
      Me.Combo_BU_Selector.SetFocus
   Else
      Call Add_RPS_LINE
   End If
End Sub
person unDeadHerbs    schedule 25.05.2018
comment
Мне нравится этот ответ, он более элегантный и позволяет избежать ExitSub. Я стараюсь избегать этого, насколько это возможно, не знаю почему, мне это просто кажется обманом. Этот ответ полностью читабелен и максимально прост. Чего и следовало ожидать с профессиональной точки зрения. Это мое мнение. Это также то, как я бы написал это. - person Riv; 28.09.2020