Excel VBA 工作表变更监控
Excel VBA Worksheet Change Monitoring
我有一个 excel sheet 应该以特定方式运行。
例如,单元格 I11 - I20 是下拉列表形式的用户输入单元格。
对于这些单元格,我需要监视用户选择的值是否小于数字 900。
例如,如果用户在单元格 I11 中选择了一个小于 900 的数字,我需要将单元格 K11 的公式设置为 = J11。
如果用户选择的数字大于 900,那么我会清除公式并允许用户输入单元格。
我需要对范围为 I11-I20 的所有单元格执行此操作。
这是我对一个单元格的设置,但是我收到一条错误消息,指出 "Object variable or With block variable not set" 这只允许我更改一行。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim A As Range
Set A = Range("I11")
If Intersect(Target, A) > 900 Then A.Offset(0, 2).Value = ""
Application.EnableEvents = False
A.Offset(0, 2).Value = "=J11"
Application.EnableEvents = True
End Sub
感谢您的帮助。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count = 1 Then
If Not Intersect(Target, Range("I11:I20")) Is Nothing Then
Application.EnableEvents = False
If Target > 900 Then
Target.Offset(0, 2).ClearContents
Else
Target.Offset(0, 2).Formula = "=J" & Target.Row
End If
Application.EnableEvents = True
End If
End If
End Sub
您已经指出 target.range,不需要启用事件。
您不需要公式,只需使单元格等于另一个单元格即可。
所以如果第一列有变化
并且该值 >900,空白单元格 2 列。如果更改为 <=900,则使单元格多两列等于单元格 1 列多。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub ' this stops code error if more than one cell is changed at once
If Not Application.Intersect(Target, Me.Range("I1:I100")) Is Nothing Then ' indicates the Target range
If Target > 900 Then
Target.Offset(, 2) = ""
Else: Target.Offset(, 2).Value = Target.Offset(, 1).Value
End If
End If
End Sub
我有一个 excel sheet 应该以特定方式运行。
例如,单元格 I11 - I20 是下拉列表形式的用户输入单元格。
对于这些单元格,我需要监视用户选择的值是否小于数字 900。
例如,如果用户在单元格 I11 中选择了一个小于 900 的数字,我需要将单元格 K11 的公式设置为 = J11。
如果用户选择的数字大于 900,那么我会清除公式并允许用户输入单元格。
我需要对范围为 I11-I20 的所有单元格执行此操作。
这是我对一个单元格的设置,但是我收到一条错误消息,指出 "Object variable or With block variable not set" 这只允许我更改一行。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim A As Range
Set A = Range("I11")
If Intersect(Target, A) > 900 Then A.Offset(0, 2).Value = ""
Application.EnableEvents = False
A.Offset(0, 2).Value = "=J11"
Application.EnableEvents = True
End Sub
感谢您的帮助。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count = 1 Then
If Not Intersect(Target, Range("I11:I20")) Is Nothing Then
Application.EnableEvents = False
If Target > 900 Then
Target.Offset(0, 2).ClearContents
Else
Target.Offset(0, 2).Formula = "=J" & Target.Row
End If
Application.EnableEvents = True
End If
End If
End Sub
您已经指出 target.range,不需要启用事件。 您不需要公式,只需使单元格等于另一个单元格即可。
所以如果第一列有变化 并且该值 >900,空白单元格 2 列。如果更改为 <=900,则使单元格多两列等于单元格 1 列多。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub ' this stops code error if more than one cell is changed at once
If Not Application.Intersect(Target, Me.Range("I1:I100")) Is Nothing Then ' indicates the Target range
If Target > 900 Then
Target.Offset(, 2) = ""
Else: Target.Offset(, 2).Value = Target.Offset(, 1).Value
End If
End If
End Sub