VBA "Compile Error: Label not defined"

37,327

Solution 1

GoTo will try and transfer the code execution to a different position in the current Subroutine with the given label.

Specifically, GoTo FunctionNotValidVarType will try and execute the line:

FunctionNotValidVarType:  'Do stuff here

which doesn't exist in your current code.

If you want to call another function use Call FunctionNotValidVarType

Solution 2

Remove the word GoTo

GoTo tells the code to jump to a label, you want it to enter a new procedure, not go to a label

Solution 3

Remove Goto from the call to your Sub()

If you really wanted to use a Goto (and you shouldn't), you would

goto Label

Label:

where the label is defined by the trailing colon :

Share:
37,327
Admin
Author by

Admin

Updated on July 20, 2022

Comments

  • Admin
    Admin almost 2 years

    I have a VBA macro which gave me that error message.

    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
    

    The offending line is:

    GoTo FunctionNotValidVarType
    

    I have the function FunctionNotValidVarType below this code. I have it as:

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

    What do I need to do to let the first function recognize FunctionNotValidVarType? Thanks.

  • SierraOscar
    SierraOscar almost 9 years
    You don't even need the word Call it's just a throwback from legacy VB code.
  • kaybee99
    kaybee99 almost 9 years
    Yes, but I still use it to make it totally clear I'm calling another function
  • Uri Goren
    Uri Goren almost 9 years
    There is a huge difference between calling a subroutine and the GoTo statement. after the subroutine we've just call ended, the execution continues from the line we called the Sub, where in the GoTo scenario, it does not
  • FreeMan
    FreeMan almost 9 years
    Or, @ThomasShera, as S O (and others) pointed out, you can remove both the goto and the call and be just fine.
  • Admin
    Admin almost 9 years
    @FreeMan OK, thanks! I have a new error message now. Should I edit the original post?
  • FreeMan
    FreeMan almost 9 years
    Nope. The SE way is one question, one (accepted) answer. Start up a new question.
  • FreeMan
    FreeMan almost 9 years
    well, you could use the goto, @cptn_hammer, in an On Error Goto..., but there are few other valid times...
  • ale10ander
    ale10ander almost 9 years
    I just added the link on shouldn't. I prefer to give people reasons why something is the way it is, rather than making sweeping proclamations. Information breeds understanding.
  • ale10ander
    ale10ander almost 9 years
    Ahh didn't look at your username :)