Excel 我遇到语法错误,你能检查一下我的代码吗?

Excel 我遇到语法错误,你能检查一下我的代码吗?,excel,vba,Excel,Vba,请检查代码,我认为错误在于退出错误循环 Option Explicit Dim mm Dim person As Range Dim amount As Range Dim ans Sub Macro1() again: mm = InputBox("Enter the name of the sales person") If mm = "Jack" Then GoTo Start ElseIf mm = "Heather" Then GoTo Start ElseIf m

请检查代码,我认为错误在于退出错误循环

Option Explicit
Dim mm
Dim person As Range
Dim amount As Range
Dim ans

Sub Macro1()

again:
mm = InputBox("Enter the name of the sales person")
If mm = "Jack" Then
    GoTo Start
ElseIf mm = "Heather" Then
    GoTo Start
ElseIf mm = "Jeff" Then
    GoTo Start
ElseIf mm = "Stephanie" Then
    GoTo Start
ElseIf mm = "Mike" Then
    GoTo Start
ElseIf mm = "Marty" Then
    GoTo Start
ElseIf mm = "Peter" Then
    GoTo Start
ElseIf mm = "Jack" Then
    GoTo Start
ElseIf mm = "Lisa" Then
    GoTo Start
Else
GoTo Error
Error:
MsgBox ("Error: invalid name,no match found")
ans = MsgBox("Do you want to try again?", vbYesNo)
If ans = 8 Then
GoTo again
ElseIf ans = 7 Then
GoTo Exit

Start:
    Set person = Range(Cells(6, 2), Cells(148, 2))
    Set amount = Range(Cells(6, 3), Cells(148, 3))
    Cells(13, 8) = mm
    Cells(14, 8) = WorksheetFunction.SumIfs(amount, person, mm)
    Cells(15, 8) = WorksheetFunction.AverageIfs(amount, person, mm)
    Cells(16, 8) = WorksheetFunction.MinIfs(amount, person, mm)
    Cells(17, 8) = WorksheetFunction.MaxIfs(amount, person, mm)
    ans = MsgBox("Do you want to try again?", vbYesNo)
If ans = 8 Then GoTo again
    End If
Exit:
End Sub
出于某种奇怪的原因,excel不允许我进入Exit:它显示编译错误,但我不知道为什么


非常感谢您的帮助

退出
是一个保留关键字,对于标识符来说是非法的


需要重命名该
Exit
标签。

Exit
是一个保留关键字,对于标识符来说是非法的


退出
标签需要重命名。

这就是我将如何重新构造代码的方法。注意,由于
GoTo
的实例,代码没有从这里跳到那里。现在,您可以从头到尾遵循逻辑,而不会跳过一行。这在可读性方面有很大的帮助,这有助于调试、将来的修改以及首先编写脚本

如果您想提供一个选项,在名称上继续尝试,直到他们碰巧输入了您的一个操作名称,那么您可以添加一个
Do循环。您应该查找该方法,如果您决定实现并且有任何问题,请在代码和问题中发布一个新问题

这里有一些关于这个主题的随机链接,可以帮助您开始,或


子测试()

将ws设置为工作表:Set ws=ThisWorkbook.Sheets(“Sheet1”)”这就是我如何重新构造代码的方法。注意,由于
GoTo
的实例,代码没有从这里跳到那里。现在,您可以从头到尾遵循逻辑,而不会跳过一行。这在可读性方面有很大的帮助,这有助于调试、将来的修改以及首先编写脚本

如果您想提供一个选项,在名称上继续尝试,直到他们碰巧输入了您的一个操作名称,那么您可以添加一个
Do循环。您应该查找该方法,如果您决定实现并且有任何问题,请在代码和问题中发布一个新问题

这里有一些关于这个主题的随机链接,可以帮助您开始,或


子测试()

将ws设置为工作表:设置ws=ThisWorkbook.Sheets(“Sheet1”)“
Exit
是保留字,不能将其用作标签。但正如前面提到的,这可能需要一些返工。您缺少了几个
End If
@urderboy的实例。如果我删除goto start,您可以建议一种替代方法吗?我应该用什么来交换它?我是vba和编程新手,请耐心等待。谢谢@BigBen非常感谢。这个问题似乎在我更改标签后得到了解决:)祝你有一天过得愉快既然你的代码可以正常工作,请随意发布它,以获取重构控制流的技巧,并避免
GoTo
跳转。
Exit
是一个保留字,你不能将其用作标签。但正如前面提到的,这可能需要一些返工。您缺少了几个
End If
@urderboy的实例。如果我删除goto start,您可以建议一种替代方法吗?我应该用什么来交换它?我是vba和编程新手,请耐心等待。谢谢@BigBen非常感谢。在我更改标签后,这个问题似乎已经得到了解决:)祝您今天过得愉快既然您的代码运行正常,请随时发布它,以获取有关重新构造控制流和避免
GoTo
jumps的提示。@NightFury我们在这里接受解决您问题的解决方案,以此表示感谢;)@夜怒我们接受我们的感谢,这是通过接受解决您问题的解决方案;)啊,这就是我讨厌过早投票的原因。。。。编辑后无法再次向上投票!啊,这就是我讨厌过早投票的原因。。。。编辑后无法再次向上投票!
Exit:
End Sub
Sub Test()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1") '<-- Update sheet name
Dim mm As String, Person As Range, Amount As Range

Set Person = ws.Range("B6:B148")
Set Amount = ws.Range("C6:C148")

mm = InputBox("Enter the name of the sales person")

Select Case mm
    Case "Jack", "Heather", "Jeff", "Mike", "Marty", "Peter", "Jack", "Lisa"
        ws.Range("H13") = mm
        ws.Range("H14") = Application.WorksheetFunction.SumIfs(Amount, Person, mm)
        ws.Range("H15") = Application.WorksheetFunction.AverageIfs(Amount, Person, mm)
        ws.Range("H16") = Application.WorksheetFunction.Minifs(Amount, Person, mm)
        ws.Range("H17") = Application.WorksheetFunction.Maxifs(Amount, Person, mm)
    Case Else
        MsgBox "Invalid Entry. Please re-run macro to try again"

End Select

End Sub