1

私はExcelでVBAプログラミングを始めたばかりで、次の方法を知りたいです(googleを検索し、ここで試したことをサンプルコードとともに投稿します)。

G11からシートの最後まで続く列Gには、「フルタイム」または「パートタイム」の2つの値が含まれています。

列Sには、S11から始まり、シートの最後まで続き、会計士がドルの値を入力します。会計士は、列GのExcelセルでデータをブロック/クリアし、「従業員はパートタイムであるため、列Gのこのセルを編集できません」というポップアップメッセージを表示することを望んでいます。

このコードを使用しましたが、行11でのみ機能します。これを列Gのすべての行で機能させたいと思います。ポインタやヒントはありますか?前もって感謝します。2つのイベントChangeとSelectionChangeを使用します

Private Sub Worksheet_Change(ByVal Target As Range)
If [$G11] = "Part Time" Then
[$S11].Interior.ColorIndex = 34
[$S11].ClearContents
[$S11].Locked = True
Else
[$S11].Interior.ColorIndex = 12
[$S11].Locked = False
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If [$G11] = "Part Time" Then
[$S11].ClearContents
[$S11].Locked = True
Else
[$S11].Locked = False

End If
End Sub 
4

1 に答える 1

0

これを試してみてください。あなたが書いたものに基づいていくつかの仮定を立てたので、あなたのデータに完全に適合しない場合はお知らせください.

Private Sub Worksheet_Change(ByVal Target As range)

If Not Intersect(Target, .Columns("S:S")) Is Nothing Then 'only do this if column S is changed

    Application.EnableEvents = False

    If range("G" & Target.Row) = "Part Time" Then

        With range("S" & Target.Row)
            .Interior.ColorIndex = 34
            .ClearContents
            .Locked = True
        End With

    Else

        With range("S" & Target.Row)
            .Interior.ColorIndex = 12
            .Locked = False
        End With

    End If

    Application.EnableEvents = True

End If

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As range)

If Not Intersect(Target, .Columns("S:S")) Is Nothing Then 'only do this if column S is changed

    Application.EnableEvents = False

    If range("G" & Target.Row) = "Part Time" Then

        With range("S" & Target.Row)
            .ClearContents
            .Locked = True
        End With

    Else
        range("S" & Target.Row).Locked = False

    End If

    Application.EnableEvents = True

End If

End Sub
于 2013-01-10T21:00:42.943 に答える