In VB6 optional argument must be eother Variant or of an intrisic data type. Also, by default all arguments are passed ByRef any way so you don't have to explicitly specify that.
Take a look at this very simple sample:
VB Code:
Option Explicit
Private Function Test(sColumnHeaders As String, _
Optional VisibleCols As Variant, _
Optional ColumnFormats As Variant) As String
'==================================================================
Test = "Not OK Yet"
If Not IsMissing(VisibleCols) Then
If VisibleCols(0) = True Then
Test = "OK"
End If
End If
End Function
Private Sub Command1_Click()
Dim arBool(1) As Boolean
arBool(0) = True
arBool(1) = True
MsgBox Test("abc", arBool)
End Sub