Измените строку
UserForm1.Repaint
на
DoEvents
Да, это увеличит время выполнения, но в случае тысячэлектронных писем, тогда у вас не так много вариантов.
СОВЕТ: Также вы можете изменить
StatusBarMsg = "Processing " & x & " out of " & initialCount & " messages."
на
StatusBarMsg = "Please do not interrupt. Processing " & x & " out of " & initialCount & " messages."
Также желательно проинформировать вашего пользователя в начале процесса, что это может занять некоторое время, и, следовательно, они могут запустить процесс, когда уверены, что не хотят работатьна этом компьютере?
Как-то так
Sub Sample()
Dim strWarning As String
Dim Ret
strWarning = "This process may take sometime. It is advisable to run this " & _
"when you don't intend to use the pc for sometime. Would you like to Continue?"
Ret = MsgBox(strWarning, vbYesNo, "Information")
If Ret <> vbYes Then Exit Sub
For x = SelectedItems.Count To 1 Step -1
'~~> Rest of the code
End Sub
HTH
Sid