Excel VBA Worksheet_Calculate event doesn't fire when Zapier modifies cells

I ran into this weird issue where my VBA code wasn’t working when Zapier updated my Excel sheet. The Worksheet_Change event just wouldn’t fire at all.

After some testing, I figured out a workaround. I had to use the Worksheet_Calculate event instead of Worksheet_Change. But here’s the tricky part - you also need to create a formula that references the cell being updated by Zapier.

For example, if Zapier is updating cell B1, I put a formula in cell B2 like this: =B1&"force calculation". This makes Excel recalculate and triggers the Calculate event.

Without this formula trick, the Calculate event won’t fire either when Zapier makes changes. Anyone else dealt with this before?

This happens because Zapier writes data directly through Excel’s API, which skips the normal user interface events that trigger Worksheet_Change. I ran into the same thing with Power Automate flows.

What worked for me was setting up a timer using Application.OnTime to check specific cells periodically. Just store the previous values in variables and compare them each time it runs. Way more reliable than relying on calculation events, especially with external data that doesn’t follow Excel’s normal event rules.

Downside is you get slight delays, but it’s way more consistent than trying to hack it with formulas.

totally get you, had the same prob. i also found that using worksheet_selectionchange could help, it triggers when u click after zap updates. not ideal, but may work in some cases. gl!

Had the same headaches with automated imports skipping VBA events. What worked for me was switching to Workbook_SheetCalculate at the workbook level instead of worksheet level, plus adding Application.EnableEvents = True in ThisWorkbook. Zapier and similar tools often disable events during imports and don’t turn them back on. Try dropping a volatile function like NOW() or RAND() in a helper cell - forces recalc when the workbook opens. You just need Excel to think something changed so it’ll trigger your event handlers properly.