2012-10-05 41 views
0

我想完成我的项目,我现在有一个表单控件,当按下时添加到一个数字的值和另一个按钮将减去该值。Excel Worksheet_Change不工作时,宏更改单元格

另一个值对于同一事物有两个不同的按钮,但值也取决于第一个值和其他事物,而不仅仅是按钮修改该值。我试图执行这段代码进行验证

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表单控件按钮更改值(或至少在按下表单控件时进行监视)时获得Excel的实现。

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

回答

1

为什么你用代码来做这件事?你可以让Cell E20有一个公式,例如:=IF(AND(E19=2,F19<12),1,""),除非满足条件,否则会使单元变为空白。

如果您确实想要使用代码执行此操作,请考虑以下事项:Worksheet_Change event“在用户或外部链接更改工作表上的单元格时发生”。

我会建议,而不必

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

在您添加它作为一个独立的子你Worksheet_Change事件,你从Worksheet_Change调用。在执行了按钮所做的任何操作之后,您还可以从您的按钮的代码中调用该子项。这样,你可以保证检查运行,不要试图依赖事件。

0

Daniel很偏右,Worksheet_Change“当用户或外部链接更改工作表上的单元格时发生。”但是这个包括由VBA引起的变化,而不包括变化的一个公式。

你的问题可以通过您的范围的仅部分资格引起(或至少加剧):

Range("E19")将指“E19” 在有源片,其可以或可以不是表Target已打开。你有Target.Worksheet.Range("F19")

尝试(注意.的)

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 

BTW是正确的。我与丹尼尔在你的整个解决方案似乎有点关闭,但我们可能没有得到全部图片...

+1

我不认为这是正确的。我的理解是,标准模块中的非限定范围引用将引用活动页。但是表单类模块中的非限定范围引用将引用该表单。我同意OP应完全限定范围参考以避免混淆。OP可能也会考虑Me关键字。 –

+0

我不确定为什么你没有告诉我我在回答评论时错了。好吧。我只是相信MSDN而不打扰测试它。我删除了我的犯规句子。 :) 谢谢 –

相关问题