2

我已经编写了一个代码,用于一键重新设置所有选项按钮,但它给出了一个错误,“对象不支持该属性或问题”。

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

谁能建议我如何修复代码并将所有选项按钮的值设为“假”。

我知道如何单独做:

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

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

感谢您的帮助和时间。

4

2 回答 2

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的更多信息

于 2013-09-09T06:19:42.527 回答
1

首先,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
于 2013-09-09T06:25:51.227 回答