0

我正在尝试完成我的一个项目,我现在有一个表单控件,当按下它时会增加一个数字的值,另一个按钮会减去该值。

另一个值具有用于同一事物的两个不同按钮,但该值也取决于第一个值和其他事物,而不仅仅是按钮修改该值。我尝试实现此代码进行验证

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Target.Worksheet.Range("F19")) Is Nothing Then
 If Range("E19") = 2 And Range("F19") < 12 Then
  Range("E20") = 1
 End If
End If
End Sub

但是 Excel 显然无法识别单元格 F19 在由按钮引起的更改时发生了更改,只有当它是由用户输入引起时。所以,这就是说,如果 F19 更新并且 19 为 2 且 F19 小于 12(E12 为 2 的先决条件是 F19 为 12 或更大)然后将 E20 设置为 1(E20 是 E19 的修饰符,它也有其他修饰符进入它)。此方法适用于不受按钮控制的其他值,但是当表单控件按钮更改值(或至少在按下表单控件时进行监视)时,我怎样才能让 excel 实现。)

编辑:如果单元格按公式更改,宏实际上也不起作用。我认为我不能使用 Worksheet_Calculate 来监控特定单元格中的变化。

4

2 回答 2

1

无论如何,您为什么要使用代码执行此操作?您可以让单元格 E20 具有如下公式:=IF(AND(E19=2,F19<12),1,"")除非满足条件,否则将使单元格变为空白。

如果你真的想用代码来做,你应该考虑到这一点:Worksheet_Change 事件“当工作表上的单元格被用户或外部链接更改时发生。”

我会推荐而不是

If Range("E19") = 2 And Range("F19") < 12 Then
    Range("E20") = 1
End If

在您的 Worksheet_Change 事件中,您将其添加为一个单独的子,您从 Worksheet_Change 调用。在您执行了按钮执行的任何操作之后,您还可以从按钮的代码中调用 sub。这样,您就可以保证检查运行并且不要尝试依赖事件。

于 2012-10-05T23:09:20.683 回答
0

丹尼尔部分正确,Worksheet_Change“当工作表上的单元格被用户或外部链接更改时发生。” 但这包括由 VBA 引起的更改,并且不包括由公式引起的更改。

您的范围的唯一部分限定可能会导致(或至少加剧)您的问题:

Range("E19")将在活动工作表上引用“E19” ,这可能是也可能不是工作表Target所在的位置。你做对了Target.Worksheet.Range("F19")

尝试(注意.'s)

With Target.Worksheet
    If Not Intersect(Target, .Range("F19")) Is Nothing Then
        If .Range("E19") = 2 And .Range("F19") < 12 Then
            .Range("E20") = 1
        End If
    End If
End With

顺便提一句。我同意丹尼尔的观点,你的整个解决方案似乎有点不对劲,但我们可能无法了解全貌......

于 2012-10-06T03:59:24.880 回答