2015-03-16 3 views
0

Я новичок в VBA. У меня проблема с MsgBox, и я не могу найти ответ. Так что объясняет это. Если значение определенной ячейки < 0, то пользователь пытается выдать платежи на максимально допустимую сумму (что в очень редкой ситуации должно произойти). Я создал всплывающее окно, чтобы спросить Да/Нет, чтобы продолжить платеж. Если они нажимают «НЕТ», он отменяет последнюю запись, и они могут повторно ввести платеж.VBA MsgBox продолжает возвращаться

Но если они нажмут ДА, то всплывающее окно исчезнет, ​​что я хочу, но оно все время появляется, когда вы пытаетесь сделать что-либо еще в электронной таблице, потому что значение продолжает оставаться < 0. Как мне сделать msgbox полностью останавливается, когда они нажимают «да»?

Это мой код до сих пор:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If Range("C39") < 0 Then 
    If MsgBox("Total cash flow/payout cannot exceed maximum contract amount" & vbCrLf & "Do you want to continue?", vbYesNo + vbCritical, "WARNING") = vbNo Then 
    Application.Undo 
    End If 
End Sub 
+0

Я хотел бы использовать либо ячейку или определенное имя, которое вы можете поместите некоторый текст (например, «Проверено»), затем ваш код может проверить это до предоставления сообщения и просто выйти, если суммы уже были проверены. – Rory

+0

Незначительная семантическая проблема: я бы изменил 'cannot' на' should not' в вашем предупреждающем сообщении, так как вся суть окна сообщения - спросить, нормально ли продолжать, несмотря на сомнительную переплату. – FreeMan

ответ

1

Есть несколько способов, чтобы работать этот код мудрый, но с точки зрения бизнеса, я хотел бы предложить, что при выборе Да что вы захватить их выбор и аннотировать это для ваших собственных записей.

Это также позволит вам использовать этот прошлый выбор в вашем заявлении верхнего уровня if.

Например, если вы установите Range («40») в «Допустимое», когда был выбран да, вы могли бы изменить, чтобы сказать

If Range("C39") < 0 AND Range("C40") <> "Allowable" Then 
    If MsgBox("Total cash flow/payout cannot exceed maximum contract amount" & vbCrLf & "Do you want to continue?", vbYesNo + vbCritical, "WARNING") = vbNo Then 
      Application.Undo 
    Else 
      Range("C40").Value = "Allowable" 
    End If 
End If 
+0

Итак, я все преподаю на VBA, поэтому, я думаю, я понимаю эту часть кода, мне тоже нужно изменить часть кода MsgBox? Сожалею. Я чувствую, что я детский сад, предлагая студенту университета помочь в моей книжке-раскраске. лол!!! – Tamara

+0

Ты хороший Тамара, мы все должны что-то начать! Я начал свою карьеру в программировании, изучив VBA и в итоге вернулся в школу для программирования. Я редактирую код выше, чтобы включить параметр Range («40») в допустимый – GMLewisII

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