Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当用户决定不更改excel vba中的选择时,如何反转下拉选择?_Excel_Vba - Fatal编程技术网

当用户决定不更改excel vba中的选择时,如何反转下拉选择?

当用户决定不更改excel vba中的选择时,如何反转下拉选择?,excel,vba,Excel,Vba,我有一个下拉按钮和分配给它的宏。从下拉列表中选择选项后,宏会询问用户是否要进行更改。如果用户选择“是”,则代码将成功运行。如果用户选择“否”,则代码结束。但下拉选择将更改为用户选择的新值。我想在用户选择不影响更改之前反映旧的选择。 下面是它的工作原理 步骤1-提案来源为NA 步骤2-用户将其更改为LA。但在确认窗口中选择“否” 第3步-由于在第2步中用户选择了“否”,因此没有发生任何事情。但选择显示提案来源为LA 当用户在确认窗口中选择“否”时,我想将其保持为NA 这是我的密码 Sub Dro

我有一个下拉按钮和分配给它的宏。从下拉列表中选择选项后,宏会询问用户是否要进行更改。如果用户选择“是”,则代码将成功运行。如果用户选择“否”,则代码结束。但下拉选择将更改为用户选择的新值。我想在用户选择不影响更改之前反映旧的选择。 下面是它的工作原理

步骤1-提案来源为NA

步骤2-用户将其更改为LA。但在确认窗口中选择“否”

第3步-由于在第2步中用户选择了“否”,因此没有发生任何事情。但选择显示提案来源为LA

当用户在确认窗口中选择“否”时,我想将其保持为NA

这是我的密码

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。你的工作做得很好。我所做的唯一更改是,当用户选择更改位置时,我将该位置存储在单独的单元格中,这允许我引用前面的选择。因此,当用户更改位置并选择不执行更改时,下拉列表将设置为上一个选择。