【问题标题】:VBA - Undo ComboBox changeVBA - 撤消组合框更改
【发布时间】:2018-06-27 16:54:55
【问题描述】:

我似乎无法让这段代码工作......我想说的是,如果组合框发生变化并且范围不为空,请询问用户是否真的想要清除范围并进行更改。如果他们说不,则撤消组合框更改回原来的样子。我的 Sub 选项不显示更新前,只显示更改和其他一些。

我尝试事先捕获该值并将其设置回该值,但它不起作用。

欢迎任何想法!

Sub ComboBox_UPC_C18_Change()

    Dim ComboBox_UPC_C18_Value As String

    Dim Location As Range
    Set Location = Range("Location_C18")

        If Application.WorksheetFunction.CountA(Location) = 0 Then

            Exit Sub

        ElseIf MsgBox("Are you sure you want change the UPC (clearing the row's data)?", vbYesNo, "User Confirmation") = vbYes Then

            Location.Value = ""

        ElseIf MsgBox("Are you sure you want change the UPC (clearing the row's data)?", vbYesNo, "User Confirmation") = vbNo Then

            ComboBox_UPC_C18.Value = ComboBox_UPC_C18_Value
            MsgBox (ComboBox_UPC_C18_Value)

            Exit Sub

        End If

    ComboBox_UPC_C18_Value = ComboBox_UPC_C18.Value
    MsgBox (ComboBox_UPC_C18_Value)

End Sub

【问题讨论】:

    标签: excel combobox vba


    【解决方案1】:

    我无法对此进行测试,但我认为这与您正在寻找的内容很接近。让我知道我是否完全不在此处:

    Private Sub ComboBox_UPC_C18_Change()
        Dim RngLocation     As Range
        Dim PrevLocation    As String
    
        Application.EnableEvents = False
    
        PrevLocation = Range("Location_C18").Value
    
        If PrevLocation = "" Then
            Range("Location_C18").Value = ComboBox_UPC_C18.Value
        Else
            If MsgBox("Are you sure you want to change this?", vbYesNo) = vbYes Then
                Range("Location_C18").Value = ComboBox_UPC_C18.Value
            Else
                ComboBox_UPC_C18.Value = PrevLocation
            End If
        End If
    
        Application.EnableEvents = True
    End Sub
    

    【讨论】:

    • 嗨炖!非常感谢你的回复。这可能很接近,但让我更多地解释一下我正在尝试做的事情:组合框是选择一种材料。 Location_C18 范围内的单元格表明每种材料在该空间中有多少(仓库管理)...位置 C18 只能容纳一种材料,因此如果用户决定更改它,他们必须验证,因为它将清除细胞;但是如果他们说不,我实际上不想改变它,组合框不应该改变,它应该显示他们试图改变之前的材质值。
    • 我遇到的问题是,如果他们在 msgbox 提示上说“否”时尝试将组合框更改为材料 B(以前是材料 A),材料的数量不会改变(这很好) 但组合框仍保留在材质 B 上,此时它应该已恢复为材质 A。
    • 好的,我想我开始关注了。 ComboBox 是 ActiveX 对象吗?
    • 听起来您用于获取材料数量的范围取决于 ComboBox 中所做的选择,对吧?
    • 嘿炖 - 它是一个 ActiveX 对象。是的,范围取决于该组合框的选择。感谢您的跟进!
    猜你喜欢
    • 2022-07-10
    • 2020-10-01
    • 1970-01-01
    • 2014-02-06
    • 2021-05-20
    • 1970-01-01
    • 2020-06-21
    • 2019-05-01
    • 2021-05-29
    相关资源
    最近更新 更多