Chiamata ad una sub passando anche un array

di il
6 risposte

Chiamata ad una sub passando anche un array

Buongiorno a tutti, sono nuovo qui.
Ho un piccolo problema, credo di sintassi: devo chiamare una sub passando tre parametri di cui uno array, Il libro dice che l'array va passato per ultimo e che va definito come variant. Ho provato a fare come dice ma non mi funziona, esce con errore "Impossibile trovare il metodo o il membro dei dati".
Riporto di seguito le istruzioni di chiamata (i primi due parametri sono definiti sul form "Fo" come TestBox e Label)
Dim ArrLungo() As Variant
ReDim ArrLungo(100)
DecoMatrix Fo.Stringone, Fo.Rispone, ArrLungo()
e la riga dove avviene l'errore
Public Sub DecoMatrix(P1 As String, Rispo As String, ParamArray VettOut() As Variant)
Grazie per l'aiuto e/o i suggerimenti.

6 Risposte

  • Re: Chiamata ad una sub passando anche un array

    Stai parlando effettivamente di VB6 (o VBA, VB.NET?)

    Dove è messo il codice della chiamata?

    Sicuro che esistano quei controlli sul Form Fo?

    Comunque, il ParamArray non si usa in quel modo ... un esempio
    
    Private Sub Form_Click()
        DecoMatrix 1, 2, 3, 4
    End Sub
    
    Public Sub DecoMatrix(ParamArray par() As Variant)
        Dim i As Integer
        
        If UBound(par) = 0 Then Exit Sub
        
        For i = 0 To UBound(par, 1)
            MsgBox par(i)
        Next i
    End Sub
    
    poi bisogna capire cosa ci devi fare esattamente, forse non sei sulla strada giusta
  • Re: Chiamata ad una sub passando anche un array

    Sì, sto parlando di VB6.
    il codice della chiamata sta in una sub:
    Private Sub BVai_Click()
    Fo.Rispone = ""
    Fo.Stringone.SetFocus
    Fo.Stringone.SelStart = 0
    Fo.Stringone.SelLength = 199
    Dim ArrLungo() As Variant
    ReDim ArrLungo(100)
    DecoMatrix Fo.Stringone, Fo.Rispone, ArrLungo()
    
    Sì, i controlli esistono, ho provato ad escludere l'array dalla chiamata e funziona

    Scusami ma dall'esempio capisco che nel chiamare devo esplicitare tutti i singoli elementi dell'array, è così?

    L'obiettivo è di passare uno stringone con una serie di codici (01, 04, 23, 45,etc) ognuno seguito da una stringa la cui lunghezza dipende dal codice e di decodificare lo stringone mettendo in risposta nell'array la stringa decodificata posizionata nell'elemento corrispondente al codice (01, 04, etc). Max 99 codici in ingresso.
    Spero di essere stato sufficientemente chiaro.
  • Re: Chiamata ad una sub passando anche un array

    Quindi non ti serve un ParamArray.

    Semplicemente
    
        Dim arr(100) As String
        DecoMatrix Fo.Stringone, Fo.Rispone, arr
    
    e
    
    Public Sub DecoMatrix(P1 As String, Rispo As String, arr() As String)    
    
  • Re: Chiamata ad una sub passando anche un array

    Niente da fare, "Impossibile trovare il metodo o il membro dei dati"
    Eppure non dovrei aver fatto errori:
    Private Sub BVai_Click()
    Fo.Rispone = ""
    Fo.Stringone.SetFocus
    Fo.Stringone.SelStart = 0
    Fo.Stringone.SelLength = 199
    Dim ArrLungo(100) As String
    DecoMatrix Fo.Stringone, Fo.Rispone, ArrLungo
    
    e
    Public Sub DecoMatrix(p1 As String, Rispo As String, VettOut() As String)
    
    Ho fatto qualche errore che non vedo?
  • Re: Chiamata ad una sub passando anche un array

    Ma in quale riga hai l'errore? Sicuro sia nella chiamata o è in una riga precedente?

    Le spiegazioni per quell'errore sono

    - il form non si chiami Fo
    - non esista Rispone
    - non esista Stringone

    Se non arrivi a soluzione da solo, fai uno zip del semplice progetto con il form e fammelo scaricare.
  • Re: Chiamata ad una sub passando anche un array

    La riga su cui dava errore era quella della Sub DecoMatrix. Ora non mi dà più errore e funziona, ma io non ho fatto nulla se non spengere e riaccendere il computer. Penso che si fosse incasinato il pc.
    Grazie, ho risolto il problema, ora il passaggio dell'array funziona .
Devi accedere o registrarti per scrivere nel forum
6 risposte