Я получаю синтаксическую ошибку. Можете ли вы проверить мой код? - PullRequest
0 голосов
/ 28 ноября 2018

Пожалуйста, проверьте код, я думаю, что ошибка заключается в выходе из цикла ошибок.

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: он показывает ошибку компиляции, но я не делаюзнаю почему

Большое спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Вот как бы я перестроил ваш код.Обратите внимание, что код не перепрыгивает отсюда туда из-за экземпляров GoTo.Теперь вы можете следовать логике от начала до конца, не пропуская ни одной строки.Это имеет большое значение для удобочитаемости, которая помогает с отладкой, изменениями в будущем и написанием вашего сценария в первую очередь.

Вы можете добавить Do Loop, если хотите представить опцию, чтобы продолжать пробовать имена, пока они не введут одно из ваших имен действий.Вам следует поискать этот метод, и если вы решите внедрить его и у вас возникнут какие-либо проблемы, опубликуйте новый вопрос со своим кодом и проблемой!

Вот несколько случайных ссылок на эту тему, которые должны помочь вам начать работу., Здесь или здесь


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
0 голосов
/ 28 ноября 2018

Exit - зарезервированное ключевое слово, недопустимое для идентификатора.

Exit:
End Sub

Этот ярлык Exit необходимо переименовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...