【问题标题】:VBA Excel Change Value in Field字段中的VBA Excel更改值
【发布时间】:2020-02-20 23:38:53
【问题描述】:

我有一个 Excel 表格,其中有一列名为“已完成?”用户从下拉列表中选择是或否。如果他们选择是,则会弹出一个使用 vbOKCancel 的消息框。如果他们确认是,该部分到目前为止正在工作,但如果发生其他任何事情(他们点击取消或 X 等),我希望将此字段更改为“否” - 这就是我正在努力解决的问题。
看起来应该很简单 - 有什么想法吗?


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 


【问题讨论】:

    标签: excel vba msgbox


    【解决方案1】:

    基本上,您的问题是滥用If Then Else End IF 结构。 (您正在混合多行和单行语法)

    See here了解更多详情

    还有其他一些问题,见内联 cmets

    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
    
    

    【讨论】:

    • 精彩绝伦,比我想象的要好得多!我永远不会靠我自己得到这一切。实际上,我在“如果答案 = vbOK 然后......”区域添加了一些已经工作的代码,所以我会尝试将它们全部结合起来,如果它不起作用,我希望我能联系到你?再次感谢 - 你摇滚!
    • @Bri 感谢您的反馈。很乐意提供帮助,但如果您最终遇到一个新问题,最好……问一个新问题
    • 我把它们加在一起,效果很好!!!!再次非常感谢 - 我不是一个编码员,但擅长复制和粘贴其他人发布的内容,因此我将答案设置为整数和其他奇怪的错误。说真的,非常感谢你教育我 - 我对你的技能感到敬畏!
    【解决方案2】:

    试试这个:

       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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-14
      • 1970-01-01
      相关资源
      最近更新 更多