当用户决定不更改excel vba中的选择时,如何反转下拉选择?
我有一个下拉按钮和分配给它的宏。从下拉列表中选择选项后,宏会询问用户是否要进行更改。如果用户选择“是”,则代码将成功运行。如果用户选择“否”,则代码结束。但下拉选择将更改为用户选择的新值。我想在用户选择不影响更改之前反映旧的选择。 下面是它的工作原理 步骤1-提案来源为NA 步骤2-用户将其更改为LA。但在确认窗口中选择“否” 第3步-由于在第2步中用户选择了“否”,因此没有发生任何事情。但选择显示提案来源为LA 当用户在确认窗口中选择“否”时,我想将其保持为NA 这是我的密码当用户决定不更改excel vba中的选择时,如何反转下拉选择?,excel,vba,Excel,Vba,我有一个下拉按钮和分配给它的宏。从下拉列表中选择选项后,宏会询问用户是否要进行更改。如果用户选择“是”,则代码将成功运行。如果用户选择“否”,则代码结束。但下拉选择将更改为用户选择的新值。我想在用户选择不影响更改之前反映旧的选择。 下面是它的工作原理 步骤1-提案来源为NA 步骤2-用户将其更改为LA。但在确认窗口中选择“否” 第3步-由于在第2步中用户选择了“否”,因此没有发生任何事情。但选择显示提案来源为LA 当用户在确认窗口中选择“否”时,我想将其保持为NA 这是我的密码 Sub Dro
Sub Dropdown6_BeiÄnderung()
'Dropbox Location
Dim Update As Integer
DropVal = Range("L18").Value
Update = MsgBox("You have selected " & Cells(18, 12) & " as Proposal Location. This will reset the Labor sheets. Do you want to continue?", vbYesNo, vbDefaultButton1)
If Update = vbYes Then
Worksheets("NA-Hours").Range("C8").Value = 0
Worksheets("LA-Hours").Range("C8").Value = 0
Worksheets("EU-Hours").Range("C8").Value = 0
Worksheets("MEA-Hours").Range("C8").Value = 0
Worksheets("AP-Hours").Range("C8").Value = 0
For i = 17 To 21
SName = Cells(i, 16).Value
If Cells(i, 17).Value = 1 Then
Worksheets(SName).Visible = True
Else: Worksheets(SName).Visible = False
End If
Next
Else
me.Drop Down 6.text = DropVal
End If
End Sub
需要有关else部分的帮助以反映存储在变量DropVal中的早期选择。请查看下一个代码示例,以了解如何处理
下拉列表
对象值:
Sub handleDropDown()
Dim dd As DropDown, rngDL As Range, DropVal As String
Set dd = ActiveSheet.DropDowns("Drop Down 6")
Set rngDL = ActiveSheet.Range(dd.ListFillRange)
DropVal = "Test" 'use here what you need
Debug.Print dd.value 'it returns the index of the selected item in ListFillRange range
Debug.Print rngDL(dd.value) 'it returns the drop down value
rngDL.cells(dd.value) = DropVal 'it set/change the drop down value, but changing the cell in the range
End Sub
我尝试显示的是更改下拉对象值。我必须承认,我不确定我是否理解“反转下拉选择”的含义
只有当DropVal
是下拉列表ListFillRange
的一部分并且是以前的选择时,才能更改下拉值。在这种情况下,下一种方法应该有效
实际上,您应该在代码的Else
部分中实现下一个代码:
Dim dd As DropDown, rngDL As Range, mtch As Long
Set dd = ActiveSheet.DropDowns("Drop Down 6")
Set rngDL = ActiveSheet.Range(dd.ListFillRange)
'If Range("L18").Value = "NA" the drop down value will become "NA"
mtch = Application.match(DropVal, rngDL, 0)' position/index of DropVal
If Not IsError(mtch) Then
dd.value = mtch
Else
MsgBox DropVal & " could not be found in " & rngDL.Address
End If
组合框是否为userform
me.Drop-Down 6.text=DropVal
想一想:在接受新版本之前,旧版本必须保留在某个地方,以免干扰新版本。因此:复制一份工作区并从那里开始工作。如果用户取消,您只需删除工作区。如果用户单击“确定”,则更新原始工作区。不能将下拉名称与空格一起使用。然后,该对象不直接返回其值,也不能接收新值。它必须具有ListFillRange
属性,并且您的代码必须对其进行操作。我将尝试发布一个小例子,让我试图用文字解释的内容更加相关……非常感谢FeneDuru。你的工作做得很好。我所做的唯一更改是,当用户选择更改位置时,我将该位置存储在单独的单元格中,这允许我引用前面的选择。因此,当用户更改位置并选择不执行更改时,下拉列表将设置为上一个选择。