I've following code:
Sub AddValidation()
Dim ws, wsDefinitions As Worksheet
Set ws = ThisWorkbook.Worksheets("TData")
Set wsDefinitions = ThisWorkbook.Worksheets("Definitions")
Call AddValidator(ws, wsDefinitions, "FaultType", FaultTypeColumn)
End Sub
And
Sub AddValidator(targetWs As Worksheet, definitionsWs As Worksheet, definitionTableName As String, targetColumnNumber)
Dim definitionsRange As Range, targetRange As Range
Set definitionsRange = definitionsWs.ListObjects(definitionTableName).ListColumns(1).DataBodyRange
Set targetRange = targetWs.ListObjects("Table1").ListColumns(targetColumnNumber).DataBodyRange
With targetRange.Validation
.Delete 'delete previous validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Formula1:="='" & definitionsWs.Name & "'!" & definitionsRange.Address
End With
End Sub
During Compilation I get "ByRef argument type missmatch" for the first argument of AddValidator - "ws". When I add ByVal to the definition:
Sub AddValidator(ByVal targetWs As Worksheet, definitionsWs As Worksheet, definitionTableName As String, targetColumnNumber)
Everything compiles fine. Two first arguments of "AddValidator" macro are Worksheet types but only first is required to be passed by Value.
Can someone tell me why?