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

コードを修正して、すべてのオプション ボタンの値を一度に「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

しかし、ボタンが多すぎるため、コードが非常に長くなり、非効率的になります。

あなたの助けと時間をありがとう。

4

2 に答える 2

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 に答える
1

特定のシートのすべての OLEObjects をループし、それがオプション ボタンの場合は 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 に答える