gpt4 book ai didi

excel - VBA 工作表更改 - 仅限制特定范围的更改

转载 作者:行者123 更新时间:2023-12-02 00:38:34 25 4
gpt4 key购买 nike

我有一个触发器,我想在某些工作表中使用 - 就在 2 个特定列内。但是,当我输入另一个范围内的值时,它会触发该工作表的 Private Sub。我希望它能够在我更改 E 或 H 列中的值时开始工作。有人知道该怎么做吗?

Private Sub Worksheet_Change(ByVal Target As Range)

Dim LR As Long
Dim rng1 As Range
Dim rng2 As Range

'WE WANT TO KEEP THE TARGET COLUMNS BETWEEN 0% TO 100%
LR = Cells(Rows.Count, "A").End(xlUp).Row

Set rng1 = Intersect(Target, Range(Cells(2, "E"), Cells(LR, "E")))

On Error GoTo 1
If Target.Value < 0 Or Target.Value > 1 Then
MsgBox "bla bla bla", vbCritical + vbMsgBoxRtlReading + vbMsgBoxRight, "error"
Target.Value = 0
Exit Sub
End If

On Error GoTo 1
Set rng2 = Intersect(Target, Range(Cells(2, "H"), Cells(LR, "H")))
If Target.Value < 0 Or Target.Value > 1 Then
MsgBox "bla bla bla", vbCritical + vbMsgBoxRtlReading + vbMsgBoxRight, "error"
Target.Value = 0
Exit Sub
End If


1
End Sub

最佳答案

您只需检查Target是否与您想要的范围相交。我将在此检查中将两列合并在一起。

正如 DisplayName 隐晦地指出的那样,由于 Target 可以包含多个单元格,因此您应该单独检查 target 中的每个单元格。或者,如果您对 Target 的意图是始终拥有一个单元格,那么您可以完全避免 For...Each 语句并使用此检查:If Target .Cells.Count > 1 然后 Exit Sub 以便在更改超过 1 个单元格时不运行该过程。

我还添加了另一个相交目标 Me.Rows("2:"& rows.count) 以避免更新您可能拥有的任何 header 。如果您的数据不包含标题,那么您可以从 Intersect() 中删除此范围。

Private Sub Worksheet_Change(ByVal Target As Range)

On Error GoTo safeExit

Dim rngIntersect As Range
Set rngIntersect = Intersect(Target, Union(Me.Columns("E"), Me.Columns("H")), _
Me.Rows("2:" & Rows.Count))

If Not rngIntersect Is Nothing Then

Application.EnableEvents = False

Dim cel As Range
For Each cel In rngIntersect
If cel.Value < 0 Or cel.Value > 1 Then
MsgBox "bla bla bla", vbCritical + vbMsgBoxRtlReading + vbMsgBoxRight, _
"error"
cel.Value = 0
End If
Next cel

End If

safeExit:

Application.EnableEvents = True

End Sub

顺便说一句,当您多次使用相同的精确范围时,继续将该范围设置为变量并不是一个坏主意。因此,我们在此代码中使用了两次 rngIntersect,这样我们就不必多次调用 Intersect() 和 Union() 了功能。最重要的是,当您只需在一处更新范围而不是在代码中多次更新时,您会遇到更少的调试麻烦。

关于excel - VBA 工作表更改 - 仅限制特定范围的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53801084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com