首页 > 解决方案 > VBA - 撤消组合框更改

问题描述

我似乎无法让这段代码工作......我基本上想说,如果组合框发生变化并且范围不为空,请询问用户是否真的想要清除范围并进行更改。如果他们说不,则撤消组合框更改回原来的样子。我的 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

标签: excelcomboboxvba

解决方案


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

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

推荐阅读