2017-06-19 50 views
0

我目前使用Office 365订阅为Mac运行Excel。我试图在某个单元格值发生变化时执行VBA宏。我已经在网上查看,看到很多使用Worksheet_Change Sub的代码示例,但它不适用于我。这是我的代码目前的样子:Office 365 for Mac:在表格更改时执行VBA宏

Private Sub Worksheet_Change(ByVal Target as Range) 
    Target.Font.ColorIndex = 5 
End Sub 

我试图在四张纸中的第二张上运行它。我在第二张纸上点击了View Code,所以我在正确的纸张上。

有人知道它为什么/可能不起作用吗?它不适用于Mac的Excel吗?

如果您需要更多信息,请告诉我。

感谢

+0

你确定你在小区变更的值。如果单元格**重新计算**新值,它将不会触发。 – YowE3K

+0

我点击它并在其中键入内容。这是否也算作重新计算? – Chris

+0

如果您确实在单元格中输入了新的内容(即使它是新公式),它应该已经被触发。所以也许它**是一种在Mac上不起作用的功能 - 恐怕我不确定Mac版本有什么限制。 (要进行调试,可以尝试在事件代码中放置一个运行“'MsgBox”来查看它是否实际触发;如果不是,则应检查是否在某个阶段没有意外禁用事件,所以在立即窗口中输入'Application.EnableEvents = True',然后再试一次。之后,我不再有想法了。) – YowE3K

回答

0

我遇到类似问题早了,因为你的症状听起来像我的(代码甚至不执行),我怀疑你的代码实际上是不正确的纸张。 Mac中的VBA窗口比Windows中的要少得多,我发现它很混乱。

确保在左侧窗格中,在适当的降下来点击

VBAProject(WorkbookName) -> Microsoft Excel Objects -> Sheet2 

,并插入Worksheet_Change功能存在。

另外,如果你想要的颜色为只在一定范围内变化,你需要使用交集:

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim KeyCells As Range 

    ' The variable KeyCells contains the cells that will cause an alert when they are changed. 
    Set KeyCells = Range("A1:Z99") 

    'This part executes only if the cell being changed is in KeyCells 
    If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then 

     Target.Font.ColorIndex = 5 

    End If 

End Sub