I have a Function:

Private Function GetMask(gX As Integer, gY As Integer, gDirect As Integer, gLen As Integer) As String

GetMask = ""

If gLen > 0 Then
For i = 1 To gLen
If Slovo(gX, gY) = "." Then Exit For
GetMask = GetMask & Slovo.S(gX, gY)
gX = gX + dX(gDirect)
gY = gY + dY(gDirect)
Next
Else
For i = 1 To 1000
If gX > Grid.Width Or gY > Grid.Height Or gX < 1 Or gY < 1 Or Slovo.S(gX, gY) = "." Then Exit For
GetMask = GetMask & Slovo.S(gX, gY)
gX = gX + sx(gDirect)
gY = gY + dY(gDirect)
Next
End If

End Function

1. Can Function to change, so you can omit argunent glen when calling functions when we do not need. I am in this case wrote glen = 0

2. Can you make a function so that it returns a string array?
I would actually be:

Dim ii, jj
For gDirect = 1 To 8
GetMask(gDirect) = ""
ii = gY
jj = gY
For i = 1 To 1000
If ii > Grid.Width Or jj > Grid.Height Or ii < 1 Or jj < 1 Or Slovo.S(ii, jj) = "." Then Exit For
GetMask(gDirect) = GetMask(gDirect) & Slovo.S(ii, jj)
gX = gX + sx(gDirect)
gY = gY + dY(gDirect)
Next
Next

Then the function would have no arguments gDirect and Glen

Or to put Public GetMask (8), so do not do Function. but do Sub?

And finally, can function as we've written do simpler?