2016-12-20 4 views
2

У меня возникли проблемы со следующим кодом:Loop в моей MsgBox - Ошибка

Sub Option_choice() 

Dim Choice_box As String 

Do 
Choice_box = InputBox("Quel état souhaitez-vous restituer ?" & _ 
    vbCrLf & "Entrez la valeur 1, 2 ou 3" & _ 
    vbCrLf & vbCrLf & vbTab & "1 - Bilan" & _ 
    vbCrLf & vbTab & "2 - Compte de résultat" & _ 
    vbCrLf & vbTab & "3 - Hors bilan", vbQuestion, "Entrez la valeur 1, 2 ou 3") 

Select Case Choice_box 
Case "1" 
    MsgBox ("Bilan") 
Case "2" 
    MsgBox ("Compte de résultat") 
Case "3" 
    MsgBox ("Hors bilan") 
Case Else 
    MsgBox "Vous devez sélectionner une valeur égale à 1, 2 ou 3" & _ 
    vbCrLf & vbCrLf & "Désirez-vous continuer ?", vbYesNo + vbExclamation, "Erreur" 

     If vbYes Then 
      Loop 
     ElseIf vbNo Then 
      MsgBox "Fin de l'opération, aucun état n'a été généré", vbInformation, "Fin du programme" 
     Else 
     'rien 
     End If 
End Select 

End Sub 

Я просто хотел бы повторить MsgBox с самого начала, когда ответ на следующий вопрос NO:

MsgBox "Vous devez sélectionner une valeur égale à 1, 2 ou 3" & _ 
     vbCrLf & vbCrLf & "Désirez-vous continuer ?", vbYesNo + vbExclamation, "Erreur" 

Он говорит:

"Loop Error без Do"

Не могли бы вы помочь?

Спасибо,

Жан

+4

Вы не можете иметь чередующиеся блоки в VBA. Ваш «Loop» должен быть после «End Select», и вы можете использовать 'Exit Do' в ветке' vbNo' для выхода из цикла, если это необходимо. –

+0

Обратите внимание, что вы не возвращаете возвращаемое значение MsgBox и констант тестирования в следующих выражениях 'If ... ElseIf'. –

+0

@VincentG Я обновил свой код и установил переменную для своего ответа (VbYesNo). –

ответ

2

Вы хотите начать цикл, который закончится только тогда, когда условие выполняется.

Попробуйте ниже:

Sub Option_choice() 

Dim Choice_box As String 
Do 
    Choice_box = InputBox("Quel état souhaitez-vous restituer ?" & _ 
     vbCrLf & "Entrez la valeur 1, 2 ou 3" & _ 
     vbCrLf & vbCrLf & vbTab & "1 - Bilan" & _ 
     vbCrLf & vbTab & "2 - Compte de résultat" & _ 
     vbCrLf & vbTab & "3 - Hors bilan", vbQuestion, "Entrez la valeur 1, 2 ou 3") 

    Select Case Choice_box 
    Case "1" 
     MsgBox ("Bilan") 
     Exit Do 
    Case "2" 
     MsgBox ("Compte de résultat") 
     Exit Do 
    Case "3" 
     MsgBox ("Hors bilan") 
     Exit Do 
    Case Else 
     If MsgBox("Vous devez sélectionner une valeur égale à 1, 2 ou 3" & vbCrLf & vbCrLf & "Désirez-vous continuer ?", vbYesNo + vbExclamation, "Erreur") = vbYes Then 
       'Nothing, it will loop anyway 
      ElseIf vbNo Then 
       MsgBox "Fin de l'opération, aucun état n'a été généré", vbInformation, "Fin du programme" 
       Exit Sub 
      End If 
    End Select 
Loop 

End Sub 
+0

ComboBox не определен и не затрагивается внутри 'Do While ... Loop', поэтому бесполезен. «Do ... Loop» без условий делает то же самое. –

+0

@VincentG «Бесполезный» - это не правильное слово в этом случае, он выполняет довольно четкую работу, но я признаю, что Do здесь лучше. – User632716

0
Sub Option_choice() 

    Dim Choice_box As String 
    Dim MB_result As Integer 

    Do 
     Choice_box = InputBox("Quel état souhaitez-vous restituer ?" & _ 
      vbCrLf & "Entrez la valeur 1, 2 ou 3" & _ 
      vbCrLf & vbCrLf & vbTab & "1 - Bilan" & _ 
      vbCrLf & vbTab & "2 - Compte de résultat" & _ 
      vbCrLf & vbTab & "3 - Hors bilan", vbQuestion, "Entrez la valeur 1, 2 ou 3") 

     Select Case Choice_box 
      Case "1" 
       MsgBox ("Bilan") 
      Case "2" 
       MsgBox ("Compte de résultat") 
      Case "3" 
       MsgBox ("Hors bilan") 
      Case Else 
       MB_result = MsgBox("Vous devez sélectionner une valeur égale à 1, 2 ou 3" & _ 
        vbCrLf & vbCrLf & "Désirez-vous continuer ?", vbYesNo + vbExclamation, "Erreur") 

       If MB_result = vbNo Then 
        MsgBox "Fin de l'opération, aucun état n'a été généré", vbInformation, "Fin du programme" 
        Exit Do 
       End If 
     End Select 
    Loop 
End Sub 
+0

Как маленькая точка, это не выйдет из цикла после выбора 1, 2 или 3 – User632716

+0

@tompreston Исходный код также не вышел из цикла, и я не знал требований, возможно, пользователь хочет задаваться последовательно. –

1

Спасибо всем за помощь, вот мой окончательный код для тех, кто нуждается в ней.

Sub Option_choice() 

Dim Choice_box, File_Choice As String 
Dim Rep_Choice As Integer 

Do 
    Choice_box = InputBox("Quel état souhaitez-vous restituer ?" & _ 
    vbCrLf & "Entrez la valeur 1, 2 ou 3" & _ 
    vbCrLf & vbCrLf & vbTab & "1 - Bilan" & _ 
    vbCrLf & vbTab & "2 - Compte de résultat" & _ 
    vbCrLf & vbTab & "3 - Hors bilan", vbQuestion, "Entrez la valeur 1, 2 ou 3") 

Select Case Choice_box 
    Case "" 'if cancelled 
     MsgBox "Fin de l'opération, aucun état n'a été généré", vbInformation, "Fin du programme" 
     Exit Sub 
    Case "1" 
     MsgBox ("Bilan") 
     File_Choice = "Bilan" 
     MsgBox ("Filechoice = " & File_Choice) 
     Exit Do 
    Case "2" 
     MsgBox ("Compte de résultat") 
     File_Choice = "Compte de résultat" 
     MsgBox ("Filechoice = " & File_Choice) 
     Exit Do 
    Case "3" 
     MsgBox ("Hors bilan") 
     File_Choice = "Hors bilan" 
     MsgBox ("Filechoice = " & File_Choice) 
     Exit Do 
    Case Else 
     Rep_Choice = MsgBox("Vous devez sélectionner une valeur égale à 1, 2 ou 3" & _ 
     vbCrLf & "Désirez-vous continuer ?", vbYesNo + vbExclamation, "Erreur") 
      If Rep_Choice = vbNo Then 
       MsgBox "Fin de l'opération, aucun état n'a été généré", vbInformation, "Fin du programme" 
       Exit Do 
      Else 
       'loop 
      End If 
End Select 
Loop 

End Sub 

Жан