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