【问题标题】:I am getting a syntax error can you please check my code?我收到语法错误,你能检查我的代码吗?
【发布时间】:2018-11-28 11:27:27
【问题描述】:

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

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 是保留字,不能作为标签使用。但正如已经提到的,这可能需要一些返工。您缺少几个 End If 实例。
  • @urdearboy 你能建议一种替代方法吗 - 如果我删除 goto start 我应该用什么交换它?我是 vba 和编程的新手,请多多包涵。谢谢!
  • @BigBen 非常感谢。一旦我更改了我的标签,这个问题似乎已经解决了 :) 祝你有美好的一天
  • 现在您的代码可以正常工作,请随时将其发布到Code Review 以获取有关重组控制流和避免GoTo 跳转的提示。

标签: excel vba


【解决方案1】:

Exit 是保留关键字,对于标识符是非法的。

Exit:
End Sub

那个Exit标签需要重命名。

【讨论】:

  • @NightFury 我们在此感谢您接受解决您的问题的解决方案 ;)
【解决方案2】:

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

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

这里有一些关于该主题的随机链接,应该有助于您入门。 Here,或here


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

【讨论】:

  • 啊啊啊,这就是我讨厌过早投票的原因……编辑后无法再次投票!
猜你喜欢
  • 2023-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
相关资源
最近更新 更多