VBA Excel Изменить значение в поле - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть таблица Excel со столбцом с именем «Завершено?» что пользователи выбирают Да или Нет из выпадающего списка. Если они выбирают Да, появляется окно сообщения с использованием vbOKCancel. Если они подтверждают Да, эта часть работает до сих пор, но если что-то еще происходит (они нажимают Отмена, или X out, и т. Д. c), я хочу, чтобы это поле было изменено на «Нет» - это то, с чем я борюсь .
Вроде бы все просто - есть идеи?


If Target.Column = 3 And Target.Value = "Yes" Then

Dim answer As Integer
answer = MsgBox("Are you sure you want to mark this as Completed?  This will move the record to the Completed Tab and cannot be undone.", vbOKCancel + vbCritical, "CRITICAL WARNING")
If answer = vbOK Then MsgBox ("OK")

'need help with this next row
Else: Target.Value = "No"
End If

End Sub 


Ответы [ 2 ]

0 голосов
/ 21 февраля 2020

Скорее всего, вы неправильно используете структуру If Then Else End IF. (вы смешиваете многострочный и однострочный синтаксис)

Подробнее см. здесь

Есть и другие проблемы, см. встроенные комментарии

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim answer As VbMsgBoxResult ' use correct data type
    Dim rng As Range, cl As Range

    On Error GoTo EH ' ensure events get turned back on

    Application.EnableEvents = False ' prevent event cascade
    Set rng = Application.Intersect(Target, Me.Columns(3)) ' get all cells in column 3 that changed
    For Each cl In rng ' process each changed cell
        If LCase(cl.Value) = "yes" Or LCase(cl.Value) = "y" Then  ' case insensitive
            answer = MsgBox("Are you sure you want to mark row " & cl.Row & " as Completed?" & vbNewLine & vbNewLine & "This will move the record to the Completed Tab and cannot be undone.", vbOKCancel + vbCritical, "CRITICAL WARNING")
            If answer = vbOK Then
                cl.Value = "Yes" ' Standardise case
                ' MsgBox "OK" ' this is a bit annoying
            Else
                cl.Value = "No"
            End If
        End If
    Next
EH:
    Application.EnableEvents = True
End Sub

0 голосов
/ 21 февраля 2020

попробуйте это:

   If Target.Column = 3 And Target.Value = "Yes" Then

      Dim answer As Integer
      answer = MsgBox("Are you sure you want to mark this as Completed?  " & _
                     "This will move the record to the Completed Tab and cannot be undone.", vbOKCancel + vbCritical, "CRITICAL WARNING")

      If answer = vbOK Then
         MsgBox ("OK")

      Else
         Target.Value = "No"

      End If

   End If
...