ciao
sono nuovo del forum e non sono esperto di programmazione.
Ho un problema con una function che ho fatto per leggere da un file di testo escludendo le righe che non mi servono iniziali e finali, nonchè altre righe selezionate in base alfatto che contengano delle stringhe che passo alla funzine.
Gli argomenti li ho definiti optional.
Quando richiamo la function dalla sub pretende che gli assegni l'ultimo argomento se pur definito optional altrimenti mi da errore di compilazione previsto espressione. Ho fatto diversi tentativi (ho provato a dare un valore di default, a scrivere byval, ecc.), ma nulla.
Qualcunoi sa dirmi dove è l'errore?
di seguito la function e la piccola sub da cui la richiamo.


grazie

codice:
Public Function ReadFileTxtRighe(Optional NomeFileInput, _
                                    Optional RigaStart, _
                                    Optional RigaEnd, _
                                    Optional ByVal StrExclude0, Optional ByVal StrExclude1, Optional ByVal StrExclude2, _
                                    Optional ByVal StrExclude3, Optional ByVal StrExclude4, Optional ByVal StrExclude5, _
                                    Optional StrExclude6 As Variant, Optional vuoto As Variant = 0) As Variant
'
' VARIABILI IN INPUT DELLA FUNZIONE:
' NomeFileInput: nome del file di input
' RigaStart: numero di riga, rispetto all'inizio del file, da cui far partire la lettura del file (impostato di default sul valore 0 per far partire la lettura dall'inizio)
' RigaEnd: numero riga, rispetto all'inizio del file, a cui far terminare la lettura del file
' StrExclude da 0 a 6: 7 stringhe in cui inserire le parole contenute nelle righe coprese tra Start e End che non si vuole vengano caricate
'
' FUNZIONI RICHIAMATE:
' Function FilePath_Default(NomeFileInput As String) As String
'
' *** COSA FA' QUESTA FUNZIONE:
' Questa funzione va a leggere il file di testo nel percorso che viene dato nel MsgBox e
' restituisce ReadFileTxt_Righe come array di stringhe contenente  ciascuna dalle righe del file di testo.
' Vengono saltate le righe vuote
' Se dichiaro la variabile Str1, nel MsgBox viene impostato un indirizzo preferenziale per il file di input
'
' **********************************************************************************************************
' CORPO DELLA FUNZIONE
'
' DICHIARAZIONE VARIABILI
' Dichiaro le variabili per l'indirizzo del file di input
Dim FilePath As Variant                    ' variabile in cui memorizzo il percorso del file di input
'
' Dichiaro le viariabili per la lettura del file di input
Dim FileNumber As Integer                 ' variabile in cui memorizzo il numero di apertura file usato dall'istruzione open
Dim righe() As Variant                    ' array in cui memorizzo come stringhe le righe del file di input
Dim Default_path                          ' indirizzo di default file di input
Dim i, j, k As Long                    ' Contatori per i cicli
'
' Dichiaro le variabili per i messaggi di errore
Dim MsgError As String                    ' variabile utilizzata per caricare i messaggi di errore
Dim Response As String                    ' variabile usata per restituire i messaggi di errore
'
' Dichiaro le variabili per le operazioni di filtro dei dati da carica
Dim StrExclude() As Variant
Dim NumStrExclude As Integer

'
' DICHIARO LE COSTANTI
NumStrExclude = 7                          ' Numero massimo delle stringhe che vengono cercate per escludere delle righe che non si vogliono caricare
ReDim StrExclude(NumStrExclude)            ' Do le dimensioni all'array delle stringhe cercate per escludere delle righe che non si vogliono caricare
StrExclude(0) = StrExclude0: StrExclude(1) = StrExclude1: StrExclude(2) = StrExclude2: StrExclude(3) = StrExclude3: StrExclude(4) = StrExclude4
StrExclude(5) = StrExclude5: StrExclude(6) = StrExclude6
'
'
' INIZIALIZZO LE VARIABILI
' ReadFileTxt_Righe = vbNullChar            ' inizializzo a zero il valore della function
FilePath = vbNullChar
FileNumber = 0
Default_path = vbNullChar
MsgError = vbNullChar
Response = vbNullChar
'
' ISTRUZIONI DELLA FUNCTION
'
' Carico indirizzo del file di input (viene proposto un indirizzo di default)
If IsMissing(NomeFileInput) Or Len(NomeFileInput) = 0 Then
    GoSub Error2
    Response = MsgBox(MsgError, , "MESSAGE ERROR!!!")
    FilePath = InputBox("Inserisci il percorso del file di input", "Percoro File")
    Else
    Default_path = FilePath_Default(NomeFileInput)          ' richiamo la function FilePath_Default per costruire l'indirizzo di default proprosto del file di input
    FilePath = InputBox("Inserisci il percorso del file di input", "Percoro File", Default_path)
End If
'
' Controllo che l'indirizzo del file passato sia corretto
If FilePath = vbNullChar Or Len(FilePath) = 0 Then
    GoSub Error1
    Response = MsgBox(MsgError, , "MESSAGE ERROR!!!")
    Exit Function
    Else
End If
' Apertura del file di input e lettura integrale del file
'
FileNumber = FreeFile                                       'ottiene un numero di file libero
Open FilePath For Input Access Read As #FileNumber
i = 0
While Not EOF(FileNumber)
    ReDim Preserve righe(i)
    Line Input #FileNumber, righe(i)
    i = i + 1
Wend
'
Close #FileNumber
'
' Elimino le righe che non mi interessano secondo i criteri definiti con le variabili passate alla function
'
If IsMissing(RigaStart) Then
    RigaStart = 0                   ' Se la variabile RigaStart non è fornita, vengono caricate le righe a partire dall'inizio del file
    Else
End If

If IsMissing(RigaEnd) Then
    RigaEnd = UBound(righe)          ' Se la variabile RigaEnd non è fornita, vengono caricate tutte le righe da RigaStart fino alla fine del file
    Else
End If
'
'
i = 0: j = 0
For i = 0 To UBound(righe)
    If i < RigaStart Or i > RigaEnd Then
                righe(i) = vbNullChar
        ElseIf _
            Len(righe(i)) = 0 Then
                righe(i) = vbNullChar
        ElseIf _
            righe(i) = " " Then
                righe(i) = vbNullChar
        Else
            For j = 0 To (NumStrExclude - 1) Step 1
                If IsMissing(StrExclude(j)) Then
                    ElseIf _
                    InStr(StrExclude(j), righe(i), 1) > 0 Then
                        righe(i) = vbNullChar
                End If
            Next j
    End If
Next
'
ReadFileTxtRighe = Filter(righe, vbNullChar, False)                'carico le stringhe eliminando tutte le righe vuote
'
Exit Function                                                       'per far terminare la function altrimenti ontinua con le righe sotto.
'
' MESSAGGI DI ERRORE
Error1: MsgError = "Non è stato passato il percorso del file di input - la stringa è vuota"
Return
Error2: MsgError = "Non è stato passato il nome del file di input (la stringa è vuota)" & Chr(13) & "Inserire il Nome del file nella finestra successiva"
Return
'
'
End Function
' **********
Sub prova2()
Dim p
Dim r

p = Worksheets("Input").Cells(55, 6).Value
r = ReadFileTxtRighe(p, , 2357, , , , , , , , 0)
'
End Sub