Vba 我的msgbox中的循环-错误

Vba 我的msgbox中的循环-错误,vba,excel,Vba,Excel,我对以下代码有问题: 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" & _

我对以下代码有问题:

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

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

“没有Do的错误循环”

你能帮忙吗

谢谢


Jean

您希望启动一个循环,该循环仅在满足条件后结束

请尝试以下方法:

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

谢谢大家的帮助,这是我为需要帮助的人编写的最后代码

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

Jean

vba中不能有交错块。您的
循环
必须在
结束选择
之后,如果需要,您可以使用
vbNo
分支中的
退出Do
来退出循环。请注意,如果。。。ElseIf句子。@VincentG我已经更新了我的代码,并为我的答案设置了一个变量(VbYesNo)。现在的问题是,当我在第一个输入框上单击“取消”时,它不会退出。。。我不知道如何逃避它。我添加了一个案例“If vbcancel then Exit Do”(如果vbcancel,则退出Do),但它不起作用您的版本不会出现,并且vbYesNo是vba中的常量,您不应该使用is作为变量的名称。仅作为一个小问题,在1、2或3为selected@tompreston原始代码也没有退出循环,我也不知道需要什么,可能用户希望按顺序被询问。ComboBox未定义,并且在
Do While中不受影响。。。循环
,因此是无用的。A
做。。。Loop
without condition也有同样的作用。@VincentG“无用”一词在这种情况下并不合适,它的作用相当明显,但我承认,在这里做得更好。
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