Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel工作表\u宏更改单元格时更改不起作用_Excel_Vba_Ms Office - Fatal编程技术网

Excel工作表\u宏更改单元格时更改不起作用

Excel工作表\u宏更改单元格时更改不起作用,excel,vba,ms-office,Excel,Vba,Ms Office,我正试图完成我的一个项目,我现在有一个表单控件,当按下它时,一个数字的值会增加,另一个按钮会减去该值 另一个值具有用于同一对象的两个不同按钮,但该值也依赖于第一个值,并且除按钮修改该值外,其他值也会修改该值。我尝试实现此代码以进行验证 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Target.Worksheet.Range("F19")) Is Nothing Then If Rang

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

另一个值具有用于同一对象的两个不同按钮,但该值也依赖于第一个值,并且除按钮修改该值外,其他值也会修改该值。我尝试实现此代码以进行验证

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
Private子工作表\u更改(ByVal目标作为范围)
如果不相交(Target、Target.Worksheet.Range(“F19”))则为空
如果范围(“E19”)=2且范围(“F19”)小于12,则
范围(“E20”)=1
如果结束
如果结束
端接头
但是Excel显然不知道F19单元格的变化是由按钮引起的,只有当它是由用户输入引起的时候。因此,这意味着,如果F19更新,19为2,F19小于12(E12为2的先决条件是F19为12或更大),则将E20设置为1(E20是E19的修饰符,其中还包含其他修饰符)。此方法适用于其他不受按钮控制的值,但如何让excel实现窗体控件按钮更改值的时间(或至少在按下窗体控件时进行监视)


编辑:如果单元格按公式更改,宏实际上也不起作用。我认为我无法使用工作表\u Calculate来监视特定单元格中的更改。

您为什么要用代码来执行此操作?您可以让单元格E20具有如下公式:
=IF(和(E19=2,F19Daniel部分正确,
Worksheet\u Change
“当用户或外部链接更改工作表上的单元格时发生。”但这包括VBA引起的更改,不包括公式引起的更改

您的问题可能是由于(或至少加剧)您的范围的唯一部分限定:

Range(“E19”)
将引用活动工作表上的“E19”,该工作表可能是工作表,也可能不是工作表
Target
处于启用状态。通过
Target.Worksheet.Range(“F19”)

尝试(注意

带有Target.worket的

如果不相交(目标,.Range(“F19”))则为零
如果.Range(“E19”)=2且.Range(“F19”)<12,则
.范围(“E20”)=1
如果结束
如果结束
以

顺便说一句,我同意Daniel的观点,因为您的整个解决方案似乎有点不对劲,但我们可能无法了解整个情况…

我认为这不对。我的理解是,标准模块中的非限定范围引用将引用活动工作表。但工作表类模块中的非限定范围引用将引用该工作表。我同意OP应该完全限定范围引用以避免任何混淆。OP也可以考虑ME关键字。我不知道为什么你没有告诉我在回答我的答案时我错了。哦,我只是相信MSDN没有费心去测试它。我删除了我冒犯的句子。
If Range("E19") = 2 And Range("F19") < 12 Then
    Range("E20") = 1
End If
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