VBA重置所有Checkbox,ComboBox,文本框和数据验证下拉列表

时间:2016-04-18 23:20:53

标签: vba excel-vba drop-down-menu combobox excel

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

但是我无法将数据验证下拉列表和组合框重新设置回第一个索引/值。

表Sheet 3

enter image description here DND

enter image description here 代码:

Private Sub CommandButton1_Click()

Sheets("Sheet5").Range("A2:DE2").Copy
Sheets("Final").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues

    Dim Sh As Worksheet
    For Each Sh In Sheets
        On Error Resume Next
            Sh.CheckBoxes.Value = False
        On Error GoTo 0
    Next Sh
    Dim tbx As OLEObject
    For Each tbx In ActiveSheet.OLEObjects
        If TypeName(tbx.Object) = "TextBox" Then
        tbx.Object.Text = ""
        End If
    Next

    Range("Sheet3!C2").Value = ""
    Sheets("DND").Range("A17").Value = 0
    Sheets("DND").Range("C17").Value = 0


End Sub

1 个答案:

答案 0 :(得分:1)

这将检查活动工作表的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)。有趣的是,例如,如果Formula1为Sheet2!E6,则上述评估完整地址。不知道我是否知道这一点。

编辑2:我认为我已经真的推翻了这个,或者在事情变得更加清楚时没有适应事实。如果您只想将单元格值设置为空白,则这一行代码将执行此操作:

ActiveSheet.Range("L6").Value = ""

但那里的乐趣在哪里?

相关问题