2017-06-19 45 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