Stop msgbox OK закрытие ввода текста

Уставший менеджер пытается решить проблему в нашей организационной CRM.

У нас есть макрос, настроенный для отправки «специальных» текстовых сообщений клиентам. Максимальное количество символов для ввода текста составляет 160 символов, и если вы превысите это значение, появится окно msgbox, предлагающее вам уменьшить текст на x символов.

Когда вы нажимаете «ОК», это затем уничтожает все поле ввода (поэтому вам нужно повторно ввести новую более короткую версию исходного сообщения).

Как я могу настроить его так, чтобы при превышении лимита символов он сообщал вам, а затем давал возможность вернуться и удалить несколько символов?

Это часть кода, которую я считаю актуальной:

set msgEntryDlg = CreateDialog("Adhoc SMS")
set msgTxtCtl = msgEntryDlg.AddControl("SMS Message: ",2, "")

if NOT msgEntryDlg.Execute then
  Msgbox "Message cancelled!"
  Exit sub
end if

mail_message = msgTxtCtl.Text
mail_message = " " + mail_message

If Len(mail_message) < 1 Then
  MsgBox "Message was empty, please enter a message!"
  Exit Sub
End If

If Len(mail_message) > 160 Then
  MsgBox "Message is too long, please reduce by " & (len(mail_message) - 160) & " characters.",4112
  Exit Sub
End If

Я думаю, что это как-то связано с циклом... но я понятия не имею!

Заранее спасибо.


person Kristina    schedule 27.08.2018    source источник


Ответы (1)


Не проверено, но я считаю, что вы ищете что-то вроде этого:

Dim success As Boolean
Do
    Set msgEntryDlg = CreateDialog("Adhoc SMS")
    Set msgTxtCtl = msgEntryDlg.AddControl("SMS Message: ", 2, "")

    If Not msgEntryDlg.Execute Then
      MsgBox "Message cancelled!"
      Exit Do
    End If

    mail_message = msgTxtCtl.Text
    mail_message = " " + mail_message

    If Len(mail_message) < 1 Then
      MsgBox "Message was empty, please enter a message!"
    End If

    If Len(mail_message) > 160 Then
      MsgBox "Message is too long, please reduce by " & (Len(mail_message) - 160) & " characters.", 4112
    End If
    success = True
Loop Until success

Если вам нужно повторять действие до тех пор, пока не будет выполнено условие, проверьте условие в конце каждого цикла. Обратите внимание, что отмена выходит из Do, а не из Sub.

person Comintern    schedule 27.08.2018
comment
Спасибо за вашу помощь - я только что вставил это (заменив весь код, который я разместил), и теперь получаю сообщение об ошибке при попытке его выполнить: Ожидаемый конец оператора в подпрограмме/функции ‹Main›...' (остальное вроде как обрезан, но в нем упоминается строка 42, которая является началом нового кода). Есть идеи? - person Kristina; 28.08.2018
comment
@Kristina Мне нужно увидеть остальную часть кода, чтобы интегрировать цикл. - person Comintern; 28.08.2018