立即重新设置所有选项按钮

时间:2013-09-09 05:17:11

标签: vba excel-vba excel-2007 excel

我已经编写了一个代码,用于在一次点击时重新设置所有选项按钮,但是它给出了错误,“对象不支持属性或事项”。

Sub Add_New_Record()
Dim i As Integer
For i = 1 To 30
    With Sheets("Form")
        '-- unlock the worksheet
        .Unprotect
        .OptionButton(i).Value = False

        '-- lock the worksheet
        '.Protect

        .Activate
        .Range("Q12").Select
     End With
     Next i
End Sub

任何人都可以建议我如何修复代码,并将所有选项按钮的值设置为“false”。

我知道如何单独做到:

Sub Add_New_Record()
    With Sheets("Form")
        '-- unlock the worksheet
        .Unprotect
        .OptionButton1.Value = False

        '-- lock the worksheet
        '.Protect
        .Activate
        .Range("Q12").Select
     End With
End Sub

但由于我的按钮太多,代码会变得非常长而且效率低下。

感谢您的帮助和时间。

2 个答案:

答案 0 :(得分:1)

遍历特定工作表上的所有OLEObject,如果是选项按钮,则将其设置为false。

For i = 1 To ActiveSheet.OLEObjects.Count
    If TypeName(ActiveSheet.OLEObjects(i).Object) = "OptionButton" Then
        ActiveSheet.OLEObjects(i).Object = False
    End If
Next i

在代码中嵌入此代码段:

Sub Add_New_Record()
    With Sheets(1)
        .Unprotect
        For i = 1 To .OLEObjects.Count
            If TypeName(.OLEObjects(i).Object) = "OptionButton" Then
                .OLEObjects(i).Object = False
            End If
        Next i
        .Protect
        .Range("Q12").Select
    End With
End Sub

阅读有关OLEObjects here

的更多信息

答案 1 :(得分:0)

首先,With语句应该在For循环之前。它应该是.OptionButtons。试试这个。

Sub Add_New_Record()
    Dim i As Integer

    With Sheets("Form")
        .Unprotect
        For i = 1 To 30
            .OptionButtons(i).Value = False
        Next i
        .Protect
    End With
End Sub