21

I'm trying to figure out why VBA is returning an error (Compile error: Expected: =) when I call a Subroutine and supply it with multiple parameters.

Sub customerController(cleanStructure As Boolean, firstCol As Integer, latCol As Integer, _
                    lngCol As Integer, Optional startRow As Long, Optional endRow As Long)
                    
Dim i As Long, j As Long, n As Long

If (cleanStructure = False) Then
    'customer data type
    If (startRow = "") Then i = 1
    If (endRow = "") Then j = countRows
    For n = i To j - i + 1
        generateURL(n, firstCol)
        newReadXMLData (url)
        ActiveSheet.Cells(i, latCol).Value = lat
        ActiveSheet.Cells(i, lngCol).Value = lng
    Next
End If

End Sub

The Subroutine that I'm calling requires two parameters:

Sub generateURL(row As Long, column As Long)
TylerH
  • 20,799
  • 66
  • 75
  • 101
MarcinAu
  • 602
  • 2
  • 6
  • 18

1 Answers1

43

When calling more than 1 parameter (i.e. just generateURL(n) works) you need to either use

  • Call generateURL(n, firstCol) , or
  • generateURL n, firstCol

using Call is the better programming technique as it is clearer

As per MSDN:

You normally use the Call statement to call a procedure that does not return a value. If the procedure returns a value, the Call statement discards it. You are not required to use the Call statement when calling a procedure. However, it improves the readability of your code.

brettdj
  • 54,857
  • 16
  • 114
  • 177
  • I think the most reliable explanation and answer to this question is what we can find in the official documentation that Microsoft provides at https://msdn.microsoft.com/en-us/library/office/gg251432.aspx (Calling Sub and Function Procedures). – Jaime Montoya May 24 '17 at 22:17
  • 2
    Well, you are not required to use the Call statement ...unless you are using parentheses, apparently. – TylerH Mar 14 '18 at 03:28
  • It is *wrong* that with just one parameter there is no difference between using and not using the parentheses; the effect is [different](https://stackoverflow.com/a/10262247/11683). It is *subjective* that using `Call` improves readability; in my opinion it doesn't. – GSerg Feb 22 '23 at 22:43