VBA重置所有复选框、组合框、文本框和数据验证下拉列表

VBA重置所有复选框、组合框、文本框和数据验证下拉列表,vba,excel,drop-down-menu,combobox,Vba,Excel,Drop Down Menu,Combobox,我对VisualBasic非常陌生,我正在尝试将组合框重置为第一个索引,将下拉列表重置为第一个索引,并重置所有复选框和文本框 但是我很难将数据验证下拉列表和组合框重置回它们的第一个索引/值 表3 DND 代码: 这将检查活动工作表L6中的数据验证是硬编码列表还是范围参考。然后,它将单元格重置为第一个列表项或范围引用中的第一个单元格: Sub ResetCellValidation() Dim cell As Excel.Range Dim rngTest As Excel.Range Dim

我对VisualBasic非常陌生,我正在尝试将组合框重置为第一个索引,将下拉列表重置为第一个索引,并重置所有复选框和文本框

但是我很难将数据验证下拉列表和组合框重置回它们的第一个索引/值

表3

DND

代码:


这将检查活动工作表L6中的数据验证是硬编码列表还是范围参考。然后,它将单元格重置为第一个列表项或范围引用中的第一个单元格:

Sub ResetCellValidation()
Dim cell As Excel.Range
Dim rngTest As Excel.Range
Dim ErrNumber As Long

Set cell = ActiveSheet.Range("L6")
With cell.Validation
    If .Type = xlValidateList Then    
        On Error Resume Next
        Set rngTest = Application.Range(.Formula1)
        'I do this goofy thing with ErrNumber to keep my indenting and flow pretty
        ErrNumber = Err.Number
        On Error GoTo 0
        'if the Validation is defined as a range
        If ErrNumber = 0 Then
            cell.Value = Application.WorksheetFunction.Index(rngTest, 1)
        'if the validation is defined by comma-separated values
        Else
            cell.Value = Split(.Formula1, ",")(0)
        End If
    End If
End With
End Sub
没有错误检查来确认该单元格中是否存在任何数据验证,但不确定您使用该单元格的方式是否存在问题

编辑:将其从Activecell.Parent.Range(.Formula1)更改为Application.Range(.Formula1)。有趣的是,例如,如果公式1是
Sheet2!E6
,上面计算完整地址。不知道我是否知道

编辑2:我想我真的想得太多了,或者当事实变得更清楚时,我没有适应。如果您只想将单元格值设置回空白,则这一行代码即可:

ActiveSheet.Range(“L6”).Value=”“


但这其中的乐趣何在?

我的回答可能会给你一些想法:@Douglancy我对Excel VBA非常陌生,所以我不太确定在哪里复制和粘贴你的代码。我已经在我的
Private子工作簿\u SheetChange
方法中复制了第一个代码,但是当我按下按钮
CommandButton1\u Click()
时,如何集成您的代码以使其成为第一个索引(这是一个空白)我看看能不能想出点什么办法。@Douglancy我已经上传了我的代码!我只需要数据验证就可以了,因为我可以重置我的其他字段。我将除了
Sub-resetcellvalization()
End-Sub
之外的所有代码复制到了我的
Private-Sub-CommandButton1\u-Click()
中,但它没有做任何事情。按钮运行,但“我的数据验证”下拉列表保持不变。注意:它应该是“C17”而不是“L6”,对吗?由于我的数据验证下拉列表位于L6是,您应该将其更改为L6。运行此操作时,带有数据验证的工作表是否处于活动状态?当你用F8单步执行时(如果你不知道怎么做,就查一下),它是否到达了以
cell.Value=
开头的行中的一行?因此我的数据验证在表3中,但我的值列表(喷洒操作员、磨边机、办公室)在一个名为“DND”的表中,从B2到B15开始。是的,我的按钮位于Sheet3上,这是我的数据验证下拉列表所在的位置。它实际上可以工作,但由于某些原因,当我单击按钮返回到Spray Operator(DND!B6)时,它总是设置值,此时它应该是一个空白(DND!B2)(我上传了我的DND工作表的图片)想象一下,你就是我,不知道你会说什么或问什么来回应你最后的评论:-)。除了那些听起来很随意的ID,你还需要什么信息来帮助我?提示:它们的存储位置和顺序。
Sub ResetCellValidation()
Dim cell As Excel.Range
Dim rngTest As Excel.Range
Dim ErrNumber As Long

Set cell = ActiveSheet.Range("L6")
With cell.Validation
    If .Type = xlValidateList Then    
        On Error Resume Next
        Set rngTest = Application.Range(.Formula1)
        'I do this goofy thing with ErrNumber to keep my indenting and flow pretty
        ErrNumber = Err.Number
        On Error GoTo 0
        'if the Validation is defined as a range
        If ErrNumber = 0 Then
            cell.Value = Application.WorksheetFunction.Index(rngTest, 1)
        'if the validation is defined by comma-separated values
        Else
            cell.Value = Split(.Formula1, ",")(0)
        End If
    End If
End With
End Sub