我对Visual Basics非常陌生,我尝试将组合框重置为第一个索引,将下拉列表重置为第一个索引,并重置所有复选框和文本框。
但是我无法将数据验证下拉列表和组合框重新设置回第一个索引/值。
表Sheet 3
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
答案 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
,则上述评估完整地址。不知道我是否知道这一点。
ActiveSheet.Range("L6").Value = ""
但那里的乐趣在哪里?