The simplest solution - which MS should have implemented, IMHO - is to insert the image and caption in-line in a table (which you can apply text wrapping to) and to not allow the row/table to break across pages. For a macro to do that, see:
https://www.msofficeforums.com/word-...html#post58886
Since you want the caption above the image, see also:
https://www.msofficeforums.com/word-...html#post62610 (post #7 in the same thread).