3

ユーザーが郵便番号と数量を 2 つのセルに入力できるスプレッドシートを作成しました。他のセルで計算を行い、結果を表示しています。

誰かが行と列を削除できないように VBA を追加しましたが、範囲内のセルが削除されないようにしたいだけでなく、ユーザーが特定のセルを変更できるようにしたいだけでなく、数式を含むセルを編集できないようにしたいと考えています。

セルE4に、ユーザーは郵便番号を入力できます。ではE6、ユーザーは数量を入力できます。これらは編集できますが、削除できません。E8:E9リストからのデータをE11:E14保持するすべてのドロップダウン リスト (検証) です。これらはドロップダウンを使用して変更できますが、削除することはできません。

L10:L14L16L23:L27、はすべて、データを編集できますが、削除することはできませんL29L30:L33

この場合の VBA はどのようになりますか? を使用すると思いますWorksheet_Change() event

4

2 に答える 2

6

これはあなたがしようとしていることですか?ユーザーはセルE4を編集できますE6が、空のままにすることはできません。また、セルが事前に空ではないと仮定しています。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Whoa

    Application.EnableEvents = False

    If Not Intersect(Target, Range("E4")) Is Nothing Then
        If Len(Trim(Range("E4").Value)) = 0 Then Application.Undo
    ElseIf Not Intersect(Target, Range("E6")) Is Nothing Then
        If Len(Trim(Range("E6").Value)) = 0 Then Application.Undo
    End If

LetsContinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume LetsContinue
End Sub

ファローアップ

ありがとう、それが私がやりたいことです。他の範囲はどうですか?それは IF THEN の負荷の単なるケースですか、それとも CASE を使用してループスルーできますか? – AdRock 2 分前

必要に応じて、以下からセル アドレスを追加/削除します。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Whoa

    Application.EnableEvents = False

    If Not Intersect(Target, Range("E4,E6,E8:E9,E11:E14,L10:L14,L16,L23:L27,L29,L30:L33")) Is Nothing Then
        If Len(Trim(Target.Value)) = 0 Then Application.Undo
    End If

LetsContinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume LetsContinue
End Sub
于 2012-05-04T11:06:53.073 に答える
1

あなたは部分的に正しいですが、 Worksheet_Change() は変更後にトリガーされるため、削除後にトリガーされます。私がしたいことは、ユーザーが入力した値を保存する隠しシートを作成し、新しい値が空 (削除) かどうかを Worksheet_Change() で確認できるようにすることです。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$E$4" Then
        ' check the previous value on the hidden sheet here, if changed, then save it, if empty, then restore it
    End If
End Sub
于 2012-05-04T09:39:57.383 に答える