1

列のあるスプレッドシートがあります(たとえば列A)。この列には、さまざまなスコアを持つユーザーが入力するという考え方です。ユーザーが列Aの回答に満足したら、回答が正しいことを確認してもらいます(理想的には、ボタンをクリックします)。そのボタンがクリックされたら、VBAを使用して列Aが再度編集されないように保護します。一部のセルをロックして編集可能にする必要があるスプレッドシートに追加のデータがあるため、ワークシートの保護オプションは使用しません(データ検証リストを使用します)。

私はVBAのこのビットを見つけましたが、これはワークシートの変更に基づいています-どういうわけかこれを使用できても、ユーザーがデータが設定されていることを確認した後にのみアクティブにすることができれば、それは理想的です:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)    
    If Intersect(Target, Range("A2:A14")) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    MsgBox "Hey, leave me alone!", 48, "Sorry, I'm protected."
    Application.Undo
    Application.EnableEvents = True
End Sub
4

1 に答える 1

3

あなたが投稿したものがあなたのニーズに合っている場合:

モジュールでは、次のようになります。

Public active As Boolean
Sub Button1_Click()
   active = True
End Sub

そして、スプレッドシート コード内で:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If active Then
        If Intersect(Target, Range("A2:A14")) Is Nothing Then Exit Sub
        Application.EnableEvents = False
        MsgBox "Hey, leave me alone!", 48, "Sorry, I'm protected."
        Application.Undo
        Application.EnableEvents = True
    End If
End Sub

おそらくより良い解決策は、ボタンが入力されるシート内のセルを指定することです。そのため、コードは実際には次のようになります。

If Range("A1") = "Locked" then
    ....
于 2012-12-05T17:36:22.873 に答える