Yes, that’s what I’ll end up doing. (Mine aren’t all textboxes, but the same principle holds.)
That works well when each row’s column has its own self-contained sanity check. Which is my current case.
When a sanity check involves multiple columns, however, that can lead to a strange kind of hell, where entering a valid value in column A is impossible until you enter a (related) value in column G, and vice versa. It’s for cases like that, where an on-exit-row event simply and clearly avoids such Catch-22’s. The whole-row check doesn’t happen until you are clearly done with the row as a whole.
Edit: maybe it’s time for a Feature Request.