2015-06-24 3 views
2

У меня есть макрос VBA, который дал мне это сообщение об ошибке.VBA «Ошибка компиляции: ярлык не определен»

Sub Function1() 
    ' Give the user macro options based on how fast or slow the computer 
    ' is using advanced conditional compiling 
    vuserChoice = MsgBox("This macro by default treats all numbers as decimals for maximum precision. If you are running this macro on an old computer, you may want to declare numbers as singles, to speed up the macro.") 
    MsgBox ("Decimal: recommended for maximum precision. Also slower." & vbNewLine & "Long: not recommended. Rounds to nearest integer." & vbNewLine & "Single: not recommended. A lightweight double." & vbNewLine & "Integer: not recommended. Quick and low-precision.") 

    If vuserChoice = "Decimal" Or "decimal" Then 
     GoTo FunctionDecimal 
    ElseIf vuserChoice = "Double" Or "double" Then 
     GoTo FunctionDouble 
    ElseIf vuserChoice = "Single" Or "single" Then 
     GoTo FunctionSingle 
    ElseIf vuserChoice = "Long" Or "long" Then 
     GoTo FunctionLong 
    Else 
     GoTo FunctionNotValidVarType 
    End If 

    ' MEeff = measure of efflux due to crudely purified HDL in scintillation 
    MsgBox "For additional information about this macro:" & vbNewLine & "1. Go to tab Developer" & vbNewLine & "2. Select Visual Basic or Macro." & vbNewLine & "See the comments or MsgBoxes (message boxes)." 
End Sub 

Нарушитель линия:

GoTo FunctionNotValidVarType 

У меня есть функция FunctionNotValidVarType ниже этого кода. У меня есть это как:

Public Sub FunctionNotValidVarType() 
    MsgBox "VarType " & VarType & " is not supported. Please check spelling." 
End Sub 

Что мне нужно сделать, чтобы первая функция признать FunctionNotValidVarType? Благодарю.

ответ

5

GoTo попытается передать исполнение кода в другую позицию в текущей подпрограмме с указанной меткой.

В частности, GoTo FunctionNotValidVarType будет пытаться выполнить следующую строку:

FunctionNotValidVarType: 'Do stuff here 

, который не существует в текущем коде.

Если вы хотите вызвать другую функцию использовать Call FunctionNotValidVarType

+4

Вам даже не нужно слово 'Call', это просто возврат к устаревшему VB-коду. –

+0

Да, но я все еще использую его, чтобы полностью понять. Я вызываю другую функцию. – kaybee99

+0

Существует огромная разница между вызовом подпрограммы и оператором GoTo.после того, как подпрограмма, которую мы только что вызвали, закончилась, выполнение продолжается из строки, которую мы назвали 'Sub', где в сценарии« GoTo »это не –

1

Удалить Goto от вызова к вашему Sub()

Если вы действительно хотите использовать Goto (и вы shouldn't), вы бы

goto Label 

Label: 

где метка определяется задним двоеточием :

+0

ну, вы _could_ используете 'goto', @cptn_hammer, в' On Error Goto ...', но есть еще несколько допустимых времен ... – FreeMan

+0

Я просто добавил ссылку на не должен. Я предпочитаю давать людям причины * почему * что-то такое, как есть, а не делать широкие прокламации. Информация порождает понимание. – ale10ander

+0

, и я одобрил редактирование @Cptn_Hammer. Все хорошо! – FreeMan

2

Удалить слово GoTo

GoTo говорит код, чтобы перейти к метке, вы хотите, чтобы ввести новую процедуру, не перейти к метке

0

GoTo переходов к метке, метка определяются с :

Например:

Sub G() 
On Error GoTo err_handling 
    a=1/0 
    Exit Sub 
err_handling: 
    MsgBox "Holy Shit, an error occurred !" 
End Sub 

Чтобы применить GoTo на Sub вам нужно назвать его и выход:

Call FunctionNotValidVarType 
Exit Sub 

(Технически, это не то же самое, как GoTo если вы берете стек вызовов во внимание, но конечный результат один и тот же)

GoTo не считается хорошей практикой, но если это вас не касается, взгляните также на GoSub на official docs.

 Смежные вопросы

  • Нет связанных вопросов^_^