Hi Keith,
This doesn't use either a userform or message box, but it works.
Sub PleaseWait()
With ActiveSheet.Shapes.AddShape(msoShapeCloudCallout, 200, 150, 150, 100)
.Name = "Wait a bit"
.TextFrame.Characters.Text = "Please Wait..."
.TextFrame.HorizontalAlignment = xlHAlignCenter
.TextFrame.VerticalAlignment = xlVAlignCenter
End With
Application.OnTime Now + 10 / 86400, "WaitOver"
End Sub
Sub WaitOver()
ActiveSheet.Shapes("Wait a bit").Delete
End Sub
This just schedules the wait message to appear for 10 seconds, then deletes it. Since you want it to disappear when the data gets refreshed, I suggest you eliminate the line of code that schedules the deletion (using the OnTime method), and simply put the code that deletes the message into the worksheet's Change or Calculate event, whichever is triggered by the data refresh.