2013-11-28 52 views
2

有没有一种方法可以在更改值时更改宏,而不一定当用户更改该值时?单元格值更改时自动运行宏(未由用户更改)

例如,我有一个连接于细胞“A1”的复选框。当复选框被选中时,A1未被选中时读取“TRUE”,它读取“FALSE”。当A1在TRUE和FALSE之间变化时,我想要一个宏运行。

我所见过的私人小组Worksheet_Change代码,但似乎当用户实际更改单元格A1只工作。是否有另一种自动运行宏的方法?

UPDATE 13年11月29日 谢谢大家对你的建议,但不幸的是这是不太工作了。让我试着进一步扩大。

我有一个复选框,下拉列表和文本字段的用户表单。来自用户表单的所有数据汇总在工作表的B列中(这是所有用户表单字段链接的地方)。当宏运行时,会发生一些计算,并且用户得到一些数字。

当用户更改用户窗体中的内容时,我希望宏自动运行。我知道这有可能成为资源密集型的,但当它涉及到它时我会处理这个问题。我想要一个过程说明如果B1:B20范围内的任何单元格的值发生变化,然后运行宏。我相信这种方法比告诉每个用户表单域运行相同的宏更容易,因为稍后可以更容易地展开和更新此表单,特别是在其他人接管维护的情况下。

我可以有一个按钮,用户可以点击运行,当他们完成填表宏,但由于用户忘记重新计算,我可以预见不准确的信息;这就是为什么我想自动完成并且实时更新数字的原因。

+1

'有宏更改时值改变了吗?为什么不点击复选框触发它? – pnuts

+0

当公式更改单元格时,[VBA代码不能运行]的可能重复(http://stackoverflow.com/questions/11406628/vba-code-doesnt-run-when-cell-is-changed-by- a-formula) –

+0

@Sid建议的重复Q处理由于公式引起的更改,并且您的答案显示为“Worksheet_Calculate”。不幸的是,由于链接复选框导致的单元格更改也不会触发此事件。 –

回答

0

从我可以告诉你,必须枚举,可以在任一单元格变化而变化或行为的细胞。这是一个示例函数。

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Address = "$A$1" or Target.Address = "$A$2" Then 
     Sheet1.Range("A3").Interior.Color = RGB(255, 0, 0) 
    End If 
End Sub 
+0

当用户_更改单元格时,会触发'Worksheet_Change'。该OP特别声明他希望检测到任何原因的更改,所以此答案对他无效。 –

-1

Worksheet_Change总是有效,但您需要具有application.enableevents = true或它不会。 但我不喜欢,如果target.address一部分,我喜欢:

Private Sub Worksheet_Change(ByVal Target As Range) 
select case target.address 'or target.row, column... 
    case "$A$1" 
    application.enableevents=false 'or the change sub will trigger again on changes! 
    code 
    application.enableevents=true 
    case "$A$2" 
    application.enableevents=false 'or the change sub will trigger again on changes! 
    code 
    application.enableevents=true 
end select 
end sub 
0

使用“Application.Volatile”在您的VBA函数的第一行

Function A() 
    Application.Volatile 


End Function 
相关问题