1

我是 excel 中的 VBA 编程新手,想知道如何执行以下操作(我已经搜索了 google,并将在此处发布我尝试过的示例代码)。

G 列,从 G11 开始,一直到工作表的末尾,包含 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 回答